我正在尝试使用以下逻辑替换“ BTC”符号的NaN值,但无法使其覆盖“ A”列中的NaN值。
df['A'].loc['BTC'] = 1 - df['A'].groupby(level=0).sum()
我也尝试了.fillna()和其他一些事情,但无法使其正常工作。
df['A'].loc['BTC'] = df['A'].loc['BTC'].fillna(1 - df['A'].groupby(level=0).sum())
我有以下数据框:
A
Date Symbol
1/1/2017 BTC Nan
ETH 0.45
XRP 0.3
1/2/2017 BTC Nan
ETH 0.55
XRP 0.2
答案 0 :(得分:3)
将transform
替换为get_level_values
进行过滤:
mask = df.index.get_level_values(1) == 'BTC'
df.loc[mask, 'A'] = df.loc[mask, 'A'].fillna(1 - df.groupby(level=0)['A'].transform('sum'))
print (df)
A
Date Symbol
1/1/2017 BTC 0.25
ETH 0.45
XRP 0.30
1/2/2017 BTC 0.25
ETH 0.55
XRP 0.20
详细信息:
print (df.groupby(level=0)['A'].transform('sum'))
Date Symbol
1/1/2017 BTC 0.75
ETH 0.75
XRP 0.75
1/2/2017 BTC 0.75
ETH 0.75
XRP 0.75
Name: A, dtype: float64