在熊猫中合并条件列

时间:2021-03-18 14:21:58

标签: python pandas dataframe

我有以下数据集,需要根据以下两个条件使用 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

1 个答案:

答案 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