在python中使用pandas有条件地连接数据帧

2024-05-20 16:25:28 发布

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

我有一个数据帧

测向

    A  B
0  test1  1
1  test2  4
2  test3  1
3  test4  2

df1型

^{pr2}$

我想有条件地将它们合并到一个新的数据帧中

df2型

   A   B
0  test1   1
1  test2   4
2  test3   0
3  test4   2
4  test5   0

一个新的数据帧,如果A列中的值等于C列,则在合并时只需将其B列的值更新为默认值0,如果A列中没有与C列中的值相等的值,则只需将其添加到如上所示的数据框中,默认值为0。在


Tags: 数据条件df1df2test1test2test3test4
3条回答
df2 = pd.merge(df,df1,left_on='A',right_on='C',how="outer")
df2['A'].fillna(value=df2['C'],inplace=True)
df2.loc[df2['A'] == df2['C'],'B'] = 0
df2 = df2[['A','B']]

我更喜欢下面的选项,但这并不是你所要求的。在

^{pr2}$

这里有一个简单的方法。您只从col C中的第二个数据帧中获取元素,该元素不在第一个数据帧的col A中,并通过将缺少的值设置为0进行连接。最后,在groupby中使用一个小技巧,以防col A中有几个相同的值,以选择带有0的值:

pd.concat([df,df1.rename(columns={'C':'A'})]).fillna(0).groupby('A', as_index=False).last()

       A  B
0  test1  1
1  test2  4
2  test3  0
3  test4  2
4  test5  0

您可以outer合并AC

In [31]: tmp = df.merge(df1, left_on='A', right_on='C', how='outer')

从列C替换列A的nan值

^{pr2}$

然后替换B值,其中C值不为空。在

In [33]: tmp.ix[tmp['C'].notnull(), 'B'] = 0

In [34]: tmp[['A', 'B']]
Out[34]:
A   B
0   test1   1
1   test2   4
2   test3   0
3   test4   2
4   test5   0

相关问题 更多 >