gpt4 book ai didi

python - 按一列上的另一个数据框对数据框进行排序 - pandas

转载 作者:行者123 更新时间:2023-12-01 01:23:00 27 4
gpt4 key购买 nike

假设我必须数据框,如下所示:

df=pd.DataFrame({'a':[1,4,3,2],'b':[1,2,3,4]})
df2=pd.DataFrame({'a':[1,2,3,4],'b':[1,2,3,4],'c':[34,56,7,55]})

我想排序df数据按顺序df2数据'a'列,所以 df.a列的顺序为 df2.a以及使整个数据框按顺序排列的内容。

期望的输出:

   a  b
0 1 1
1 2 4
2 3 3
3 4 2

(手动制作,如果有任何错误,请告诉我:D)

我自己的尝试:

df = df.set_index('a')
df = df.reindex(index=df2['a'])
df = df.reset_index()
print(df)

按预期工作!!!,

但是当我有更长的数据帧时,例如:

df=pd.DataFrame({'a':[1,4,3,2,3,4,5,3,5,6],'b':[1,2,3,4,5,5,5,6,6,7]})
df2=pd.DataFrame({'a':[1,2,3,4,3,4,5,6,4,5],'b':[1,2,4,3,4,5,6,7,4,3]})

它没有按预期工作。

注意:我不仅想要解释原因,而且还需要一个针对大数据帧的解决方案

最佳答案

一种可能的解决方案是在两个 DataFrame 中创建辅助列,因为重复的值:

df['g'] = df.groupby('a').cumcount()
df2['g'] = df2.groupby('a').cumcount()

df = df.set_index(['a','g']).reindex(index=df2.set_index(['a','g']).index)
print(df)
b
a g
1 0 1.0
2 0 4.0
3 0 3.0
4 0 2.0
3 1 5.0
4 1 5.0
5 0 5.0
6 0 7.0
4 2 NaN
5 1 6.0

或者可能需要合并:

df3 = df.merge(df2[['a','g']], on=['a','g'])
print(df3)
a b g
0 1 1 0
1 4 2 0
2 3 3 0
3 2 4 0
4 3 5 1
5 4 5 1
6 5 5 0
7 5 6 1
8 6 7 0

关于python - 按一列上的另一个数据框对数据框进行排序 - pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53627976/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com