我的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=),但我目前的知识也停留在那里。
Col A
Col B
.sort_values(by=)
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
oewdyzsn2#
是的,您可以通过使用sort_values()并创建Map字典来实现所需的输出,以便:
sort_values()
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
2条答案
按热度按时间vxf3dgd41#
如果需要每
Col B
滚动一个值,则使用lambda函数:oewdyzsn2#
是的,您可以通过使用
sort_values()
并创建Map字典来实现所需的输出,以便:输出: