如何将数据帧中的值与某些条件匹配?

2024-06-01 06:26:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧,我还不能完成这个简单的任务,我想匹配2列,如果条件是真的,然后在相应的行中附加值。像这样的。你知道吗

      0        1        weight
0     Pablo    Frida       2
1     Pablo     Andy       1
2     Pablo  Vincent       1
3    Claude  Georgia       3
4    Claude     Andy       1
5   Georgia     Andy       1
6      Andy    Frida       1
7      Andy     Joan       1
8      Andy      Lee       1
9   Vincent    Frida       2
10     Joan      Lee       3 

         0       1      2    weight
0      Andy   Claude   0     0.0
1      Andy    Frida  20     0.0
2      Andy  Georgia -10     0.0
3      Andy     Joan  30     0.0
4      Andy      Lee -10     0.0
..
..
17    Frida  Vincent  60     0.0
18  Georgia     Joan   0     0.0

预期结果如下:

        0       1      2    weight
0      Andy   Claude   0     1
1      Andy    Frida  20     1
2      Andy  Georgia -10     1
3      Andy     Joan  30     1
4      Andy      Lee -10     1
..
..
17    Frida  Vincent  60     2
18  Georgia     Joan   0     0.0

所以我面临的问题是,列的顺序可能不同,也就是说,它是一组名称。 第一个数据帧的维数为(11,3) 第二个数据帧的维数为(19,4)

我该怎么处理这个问题??我试着这样做:

for i in len(df2):
    if df1[0][i] == df2[0][i] or df1[0][i] == df2[1][i] and df1[1][i] == df2[0][i]  or df1[0][i] == df2[0][i]:
        df2['weight'][i] = df1['weight'][i]

Tags: or数据条件pablodf1df2fridaandy
1条回答
网友
1楼 · 发布于 2024-06-01 06:26:01

对列排序-

df1.iloc[:, :2] = np.sort(df1.iloc[:, :2], axis=1)
df2.iloc[:, :2] = np.sort(df2.iloc[:, :2], axis=1)

现在,执行内部merge-

df2 = df2.drop('weight', 1).merge(df1, on=['0', '1'])
df2.head()

      0        1   2  weight
0  Andy   Claude   0       1
1  Andy    Frida  20       1
2  Andy  Georgia -10       1
3  Andy     Joan  30       1
4  Andy      Lee -10       1

相关问题 更多 >