如何用熊猫中其他两个列的相同值用同一列的非缺失值填充缺失值?

时间:2020-09-03 13:24:53

标签: python pandas missing-data

我的数据框如下:

              date currency  exchange_rate
222     1987-05-01      USD         1.0000
226     2019-11-01      AUD         1.4730
           ...      ...            ...
1455221 2019-10-01      AUD         1.4710
1455222 2019-11-01      AUD            NaN

对于exchange_rate列中的每个NaN,我想用货币和日期具有相同值的值来填充它。 所以我希望它看起来如下:

              date currency  exchange_rate
222     1987-05-01      USD         1.0000
226     2019-11-01      AUD         1.4730
           ...      ...            ...
1455221 2019-10-01      AUD         1.4710
1455222 2019-11-01      AUD         1.4730

谢谢

2 个答案:

答案 0 :(得分:1)

您可以通过GroupBy.transformGroupBy.first获得每个组的第一个非缺失值,然后通过它们重新分配错误的值:

s = df.groupby(['date', 'currency'])['exchange_rate'].transform('first')
df['exchange_rate'] = df['exchange_rate'].fillna(s)

或者:

df['exchange_rate'] = df['exchange_rate'].combine_first(s)

print (df)
               date currency  exchange_rate
222      1987-05-01      USD          1.000
226      2019-11-01      AUD          1.473
1455221  2019-10-01      AUD          1.471
1455222  2019-11-01      AUD          1.473

测试每个组的第一个值是否为NaN

print (df)
               date currency  exchange_rate
222      1987-05-01      USD          1.000
226      2019-11-01      AUD            NaN
1455221  2019-10-01      AUD          1.471
1455222  2019-11-01      AUD         50.000


s = df.groupby(['date', 'currency'])['exchange_rate'].transform('first')
df['exchange_rate'] = df['exchange_rate'].fillna(s)
print (df)
               date currency  exchange_rate
222      1987-05-01      USD          1.000
226      2019-11-01      AUD         50.000
1455221  2019-10-01      AUD          1.471
1455222  2019-11-01      AUD         50.000

答案 1 :(得分:1)

尝试

df['exchange_rate'] = df.groupby(['date', 'Currency'])['exchange_rate'].apply(lambda x : x.ffill().bfill())