我的数据框如下:
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
谢谢
答案 0 :(得分:1)
您可以通过GroupBy.transform
和GroupBy.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())