我有一个熊猫数据框(df1),如下所示:
No car pl. Value Expected
1 Toyota HK 0.1 0.12
1 Toyota NY 0.2 NaN
2 Saab LOS 0.3 NaN
2 Saab UK 0.4 0.6
2 Saab HK 0.5 0.51
3 Audi NYU 0.6 NaN
3 Audi LOS 0.7 NaN
4 VW UK 0.8 NaN
5 Audi HK 0.9 NaN
我还有另一个数据帧(df2),如下所示:
No pl. Expected
2 LOS 0.35
3 NYU 0.62
3 LOS 0.76
5 HK 0.91
我希望我的最终数据框看起来像这样:
No car pl. Value Expected
1 Toyota HK 0.1 0.12
1 Toyota NY 0.2 NaN
2 Saab LOS 0.3 0.35
2 Saab UK 0.4 0.6
2 Saab HK 0.5 0.51
3 Audi NYU 0.6 0.62
3 Audi LOS 0.7 0.76
4 VW UK 0.8 NaN
5 Audi HK 0.9 0.91
我尝试过:
df = df1.fillna(df1.merge(df2, on=['No','pl.']))
但是df1在输出中保持不变
我在这里看到的问题是关于形状相同的数据框的。形状不同时有办法做到这一点吗?
谢谢!
答案 0 :(得分:2)
由于我们要在两个关键列上进行匹配并更新df1
数据框,因此我们可以将set_index
与fillna
一起使用,因为fillna
在索引中对齐:
keys = ['No', 'pl.']
df1 = df1.set_index(keys).fillna(df2.set_index(keys)).reset_index()
No pl. car Value Expected
0 1 HK Toyota 0.1 0.12
1 1 NY Toyota 0.2 NaN
2 2 LOS Saab 0.3 0.35
3 2 UK Saab 0.4 0.60
4 2 HK Saab 0.5 0.51
5 3 NYU Audi 0.6 0.62
6 3 LOS Audi 0.7 0.76
7 4 UK VW 0.8 NaN
8 5 HK Audi 0.9 0.91
或者我们可以为此使用专用方法Series.update
:
df1 = df1.set_index(keys)
df1['Expected'].update(df2.set_index(keys)['Expected'])
df1 = df1.reset_index()
No pl. car Value Expected
0 1 HK Toyota 0.1 0.12
1 1 NY Toyota 0.2 NaN
2 2 LOS Saab 0.3 0.35
3 2 UK Saab 0.4 0.60
4 2 HK Saab 0.5 0.51
5 3 NYU Audi 0.6 0.62
6 3 LOS Audi 0.7 0.76
7 4 UK VW 0.8 NaN
8 5 HK Audi 0.9 0.91
答案 1 :(得分:1)
使用带有echo form_upload(array(
"id" => "image",
"name" => "image",
"value" => $info->image
));
参数的左连接,然后用Series.fillna
替换DataFrame.pop
的缺失值以供使用,并删除列suffixes
:
Expected_