基于另一列中的前一行对Pandas DataFrame排序

yv5phkfx  于 2023-02-17  发布在  其他
关注(0)|答案(2)|浏览(172)

我的Python项目中有以下DataFrame:

df1 = pd.DataFrame({"Col A":[1,2,3],"Col B":[3,2,2]})

我想以这样的方式订购它:

df2 = pd.DataFrame({"Col A":[1,3,2],"Col B":[3,2,2]})

我的目标是Col A中的每个值都与Col B中的前一个值匹配。
你有什么想法,如何使这一工作正常和尽可能少的努力?
我试着使用.sort_values(by=),但我目前的知识也停留在那里。

vxf3dgd4

vxf3dgd41#

如果需要每Col B滚动一个值,则使用lambda函数:

df1 = pd.DataFrame({"Col A":[1,2,3,7,4,8],"Col B":[3,2,2,1,1,1]})
print (df1)
   Col A  Col B
0      1      3
1      2      2
2      3      2
3      7      1
4      4      1
5      8      1

df1['Col A'] = df1.groupby('Col B')['Col A'].transform(lambda x: np.roll(x, -1))
print (df1)
   Col A  Col B
0      1      3
1      3      2
2      2      2
3      4      1
4      8      1
5      7      1
oewdyzsn

oewdyzsn2#

是的,您可以通过使用sort_values()并创建Map字典来实现所需的输出,以便:

import pandas as pd

df1 = pd.DataFrame({"Col A":[1,2,3],"Col B":[3,2,2]})

# mapping_dict for ordering
mapping_dict = {1:3, 3:2, 2:2}

df1["sort_order"] = df1["Col A"].map(mapping_dict)

df2 = df1.sort_values(by="sort_order").drop(columns=["sort_order"])

print(df2)

输出:

Col A  Col B
0      1      3
2      3      2
1      2      2

相关问题