[英]Fill dataframe column with a value if multiple columns match values in a dictionary
我有两个数据框 - 一个包含多个分类列的大数据框和一个包含缺失值的列,另一个是具有相同分类列和一个包含键值的列的字典。
本质上,如果所有分类列都匹配,我想用第二个中的键值填充大数据框中的缺失值。
缺失值df:
Color Number Letter Value
0 Red 2 B NaN
1 Green 2 A NaN
2 Red 2 B NaN
3 Red 1 B NaN
4 Green 1 A NaN
5 Red 2 B NaN
6 Green 1 B NaN
7 Green 2 A NaN
字典df:
Color Number Letter Value
0 Red 1 A 10
1 Red 1 B 4
2 Red 2 A 3
3 Red 2 B 15
4 Green 1 A 21
5 Green 1 B 9
6 Green 2 A 22
7 Green 2 B 1
所需的 df:
0 Red 2 B 15
1 Green 2 A 22
2 Red 2 B 15
3 Red 1 B 4
4 Green 1 A 21
5 Red 2 B 15
6 Green 1 B 9
7 Green 2 A 22
我不确定是否应该将“字典 df”作为实际字典,还是将其保留为数据框(它是从 csv 中提取的)。
如果没有无数的 if else 语句,是否可以干净利落地做到这一点?
谢谢!
尝试:
missing_df.reset_index()[['index', 'Color', 'Number', 'Letter']]\
.merge(dict_df, on = ['Color', 'Number', 'Letter'])\
.set_index('index').reindex(missing_df.index)
输出:
Color Number Letter Value
0 Red 2 B 15
1 Green 2 A 22
2 Red 2 B 15
3 Red 1 B 4
4 Green 1 A 21
5 Red 2 B 15
6 Green 1 B 9
7 Green 2 A 22
这行得通吗?
>>> df_1[['Color', 'Number', 'Letter']].merge(df_2,
... on=('Color', 'Number', 'Letter'),
... how='left')
Color Number Letter Value
0 Red 2 B 15
1 Green 2 A 22
2 Red 2 B 15
3 Red 1 B 4
4 Green 1 A 21
5 Red 2 B 15
6 Green 1 B 9
7 Green 2 A 22
认为值得一提 - 将 stackoverflow pandas 问题中的示例转换为数据帧的一种非常简单的方法,只需将其剪切并粘贴到这样的字符串中即可:
>>> df_1 = pd.read_csv(StringIO("""
... Color Number Letter Value
... 0 Red 2 B NaN
... 1 Green 2 A NaN
... 2 Red 2 B NaN
... 3 Red 1 B NaN
... 4 Green 1 A NaN
... 5 Red 2 B NaN
... 6 Green 1 B NaN
... 7 Green 2 A NaN
... """), sep=r'\s+')
我将缺失值 df 称为:df 和字典 df 为:ddf,将两者都视为数据帧
首先从缺失值 df 中删除空值列:
df.drop(['Value'], axis=1)
其次运行下面的命令,它应该为你完成任务。
df.assign(Value=ddf['Value'])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.