我有以下数据集,需要根据以下两个条件使用 id 和 Days 将 df1 与 df2 连接起来:-
条件 1:如果 id 和 days 匹配,则从值列中选择精确值
条件 2:如果 id 匹配而该 id 的天不匹配,则取该 id 的所有天数的平均值。
例如:- 对于 id 34,该值应为 3.5(3 和 4 的平均值)
df1 = pd.DataFrame({'id':[12, 34, 56, 78], 'Days' :['Sun', 'Mon', 'Tue', 'Wed']})
df2 = pd.DataFrame({'id':[12,12,34,34,56,56,56], 'Days' :['Sun', 'Mon', 'Fri', 'Sat', 'Fri', 'Tue', 'Wed'], 'value':[1,2,3,4,5,6,7]})
df1
id Days
0 12 Sun
1 34 Mon
2 56 Tue
3 78 Wed
df2
id Days value
0 12 Sun 1
1 12 Mon 2
2 34 Fri 3
3 34 Sat 4
4 56 Fri 5
5 56 Tue 6
6 56 Wed 7
答案 0 :(得分:2)
试试:
# condition 1
out = df1.merge(df2, on=['id','Days'], how='left')
# condition 2
out['value'] = out['value'].fillna(
out['id'].map(df2.groupby('id')['value'].mean())
)
输出:
id Days value
0 12 Sun 1.0
1 34 Mon 3.5
2 56 Tue 6.0
3 78 Wed NaN