我有两个数据帧,我想使用 groupby 计算两列之间的差异,因此对于 df1 groupby ColA & ColB 并排序 ColD assending,将 df2 与 groupby ColA2 & ColB2 连接并排序 ColD dessending,并将 df2 匹配到 df1与 df2 的 ColD2 信息。预先感谢您。
DF 1
colA ColB ColD
A 3H1 150
A 3H1 550
A HYT 250
B 3H1 350
B 3H1 450
B 8YT 750
C 8YT 1050
C 8YT 450
C 3H1 250
C 8YT 550
C 8YT 750
C 3H1 650
DF 2
colA2 ColB2 ColD2 ColC2
A 3H1 500 A50
A 3H1 600 B50
A HYT 300 G60
B 3H1 500 T67
B 3H1 1500 H63
B 8YT 800 K72
C 8YT 700 Y23
C 8YT 400 O98
C 3H1 200 Y11
C 8YT 500 A78
C 8YT 700 H23
输出:基本上保留 df1 数据帧,并让 df2 加入 groupby ColA 和 ColB,将 ColD2 重新排序为 ColD 的排序(ColD 上行,ColD2 下行),并让 df2 的 ColC2 加入。
colA ColB ColD ColD2 ColC2
A 3H1 150 600 B50
A 3H1 550 500 A50
A HYT 250 300 G60
B 3H1 350 1500 H63
B 3H1 450 500 T67
B 8YT 750 800 K72
C 8YT 450 700 H23
C 8YT 550 700 Y23
C 3H1 250 200 Y11
C 8YT 750 500 A78
C 8YT 1050 400 O98
C 3H1 650 na na
最佳答案
尝试:
df2 = df2.sort_values(by=["colA2", "ColB2", "ColD2"], ascending=[True, True, False])
df1["tmp"] = df1.groupby(["colA", "ColB"]).cumcount().values
df2["tmp"] = df2.groupby(["colA2", "ColB2"]).cumcount().values
x = df1.merge(
df2, left_on=["colA", "ColB", "tmp"], right_on=["colA2", "ColB2", "tmp"], how="left"
)
print(x[["colA", "ColB", "ColD", "ColD2", "ColC2"]])
打印:
colA ColB ColD ColD2 ColC2
0 A 3H1 150 600.0 B50
1 A 3H1 550 500.0 A50
2 A HYT 250 300.0 G60
3 B 3H1 350 1500.0 H63
4 B 3H1 450 500.0 T67
5 B 8YT 750 800.0 K72
6 C 8YT 1050 700.0 Y23
7 C 8YT 450 700.0 H23
8 C 3H1 250 200.0 Y11
9 C 8YT 550 500.0 A78
10 C 8YT 750 400.0 O98
11 C 3H1 650 NaN NaN
关于Python按两个列值的相反排序顺序按Groupby连接两个数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75239629/