0
我有三个dataframes:合并时,从两个数据帧中选择相同列的非空值?
df1 = pd.DataFrame({'code': [123, 124], 'name': ['Manchester', 'Liverpool']})
df2 = pd.DataFrame({'code': [123], 'group': ['b'], 'items_highcost': [10]})
df3 = pd.DataFrame({'code': [123, 124], 'group': ['b', 'c'], 'items_not_highcost': [11, 8]})
我想将它们合并到一个单一的框架,但不包括不在df1
任何行,所以我做的两个左联接:
df_merged = pd.merge(df1, df2, on='code', how='left')
df_merged = pd.merge(df_merged, df3, on='code', how='left')
这给我下面的合并数据集:
code name group_x items_highcost group_y items_not_highcost
0 123 Manchester b 10 b 11
1 124 Liverpool NaN NaN c 8
但我希望这是对每行一个group
列,与非NU其值为group
,无论是从df2
还是df3
或两者兼而有之。 (这是安全的假设的group
值将是相同的df2
和df3
相同的代码,因为他们是来自同一个数据源来了。)
现在我这样做:
def get_group(row):
if row['group_x']: return row['group_x']
if row['group_y']: return row['group_y']
return None
df_merged['group'] = df_merged.apply(get_group, axis=1)
df_merged.drop(['group_x', 'group_y'], inplace=True, axis=1)
这个工程,但很丑。理想情况下,我不会有group_x
和group_y
的中间步骤,但可以在一个步骤中获得非空值。有没有更好的办法?
谢谢 - 你的意思做的,而不是'merge'呢? – Richard
在你的情况下,这将会更简单,而且更多的是你在填充缺失值时要做的事情 – EdChum