12

假设我有两个数据框xy在 Pandas 中,我想xy. 我试过这个:

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

但它没有用,我怀疑是因为 Pandas在分配期间对齐xy(具有相同的索引集)之间的索引

如何让 Pandas 填充另一个数据框中的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()因为它稍微快一些,并且在大数据帧的情况下可能有用(.values甚至更快,但建议在to_numpy()生产时使用,如下所述:https ://stackoverflow.com /a/54324513/4909087 )

>>> 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 回答