2024-05-20 16:25:28 发布
网友
我有一个数据帧
测向
A B 0 test1 1 1 test2 4 2 test3 1 3 test4 2
df1型
我想有条件地将它们合并到一个新的数据帧中
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。在
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']]
我更喜欢下面的选项,但这并不是你所要求的。在
这里有一个简单的方法。您只从col C中的第二个数据帧中获取元素,该元素不在第一个数据帧的col A中,并通过将缺少的值设置为0进行连接。最后,在groupby中使用一个小技巧,以防col A中有几个相同的值,以选择带有0的值:
col C
col A
0
groupby
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合并A和C列
outer
A
C
In [31]: tmp = df.merge(df1, left_on='A', right_on='C', how='outer')
从列C替换列A的nan值
然后替换B值,其中C值不为空。在
B
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
我更喜欢下面的选项,但这并不是你所要求的。在
^{pr2}$这里有一个简单的方法。您只从
col C
中的第二个数据帧中获取元素,该元素不在第一个数据帧的col A
中,并通过将缺少的值设置为0
进行连接。最后,在groupby
中使用一个小技巧,以防col A
中有几个相同的值,以选择带有0
的值:您可以
outer
合并A
和C
列从列
^{pr2}$C
替换列A
的nan值然后替换
B
值,其中C
值不为空。在相关问题 更多 >
编程相关推荐