如何覆盖NaN值?

时间:2019-03-01 10:28:10

标签: python pandas

我正在尝试使用以下逻辑替换“ 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     

1 个答案:

答案 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