12

2 つのデータフレームがxありy、Pandas で列xを並べ替えた結果を列に入力したいとしyます。私はこれを試しました:

x['foo']  = y['bar'].order(ascending=False)

しかし、それはうまくいきませんでした.Pandasは割り当て中にと(同じインデックスのセットを持つ)の間のインデックスを整列させるためだと思います.xy

インデックスの配置を無視して、パンダにx['foo'] 別のデータフレームの別の列を入力させるにはどうすればよいですか?

4

2 に答える 2

10

インデックスを無視するために私が考えることができる最も簡単な方法はpandas、無視するインデックスなしで何かを与えることです。から始まる

>>> x = pd.DataFrame({"foo": [10,20,30]},index=[1,2,0])
>>> y = pd.DataFrame({"bar": [33,11,22]},index=[0,1,2])
>>> x
   foo
1   10
2   20
0   30
>>> y
   bar
0   33
1   11
2   22

通常の整合アプローチがあります。

>>> x["foo"] = y["bar"].order(ascending=False)
>>> x
   foo
1   11
2   22
0   33

x["foo"]または、リストに設定することにより、整列していないもの:

>>> x["foo"] = y["bar"].order(ascending=False).tolist()
>>> x
   foo
1   33
2   22
0   11
于 2013-04-12T19:44:48.247 に答える
1

コードを試してみましたが、order()メソッドが廃止されたようです。最初の質問がかなり古いため、これは当然のことです。だから今、私たちはsort_values()同じ結果を達成するために残されています。to_numpy()それに加えて、わずかに高速であり、大きな DataFrame の場合に役立つ可能性があるため、使用することで構成される改良点があります( はさらに高速ですが、ここで説明されているように、本番環境で作業するときは常に.values使用することをお勧めします: https://stackoverflow.com /a/54324513/4909087 )to_numpy()

>>> x["foo"] = y["bar"].sort_values(ascending=False)
>>> x
   foo
1   33
2   22
0   11

>>> %timeit x["foo"] = y["bar"].sort_values(ascending=False).to_list()
165 µs ± 965 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
>>> %timeit x["foo"] = y["bar"].sort_values(ascending=False).to_numpy()
136 µs ± 421 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
>>> %timeit x["foo"] = y["bar"].sort_values(ascending=False).values
129 µs ± 826 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
于 2021-12-15T14:23:17.127 に答える