1

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

1 回答 1

3

通过过滤使用transformwith 替换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
于 2019-03-01T10:34:21.530 回答