我正在尝试根据两个数据框中都存在的键在另一个数据框中填充空值。
Case when {item.custitem54} = 'Yes'
and {shipdate} between date '2020-05-25' and date '2020-12-25' then {quantity}
when {item.custitem54} is null then {quantity}
else null
end
df
parcel ID
1234 NaN
4586 lmnop
5960 wywy
由于df和df1中的包裹号相同,因此我只想基于df1填充ID列中的空值。
答案 0 :(得分:1)
您可以使用map
,它允许您使用字典来映射值。
na_dict = dict(zip(df1.Parcel,df1.ID))
df.ID.fillna(df.ID.map(na_dict))
答案 1 :(得分:1)
答案 2 :(得分:1)
我认为combine_first()
是个好方法,但是您需要先设置索引-在这种情况下,列parcel
在这两种情况中都很常见:
import numpy as np
import pandas as pd
df = pd.DataFrame({
'parcel': [1234, 4586, 5960, 9999],
'ID': [np.nan, 'lmnop', 'wywy', np.nan]
})
df1 = pd.DataFrame({
'parcel': [1234, 4586, 9999, 8888],
'ID': ['abcd', 'lmnop', 'xxx', 'nonexistent']
})
df_out = df.set_index('parcel').combine_first( df1.set_index('parcel') )
df_out = df_out[df_out.index.isin(df.parcel)].reset_index()
print(df_out)
打印:
parcel ID
0 1234 abcd
1 4586 lmnop
2 5960 wywy
3 9999 xxx