熊猫数据框替换系列中的值

时间:2018-08-15 14:24:08

标签: python python-3.x pandas

我正在尝试根据条件选择来更新my_df,如:

my_df[my_df['group'] == 'A']['rank'].fillna('A+')

但是,这不是持久性...例如:my_df仍然具有NaN或NaT ...,而且我不确定如何就地执行此操作。请告知如何将更新持久化到my_df。

3 个答案:

答案 0 :(得分:2)

创建布尔掩码并分配给过滤后的列rank

my_df = pd.DataFrame({'group':list('AAAABC'),
                     'rank':['a','b',np.nan, np.nan, 'c',np.nan],
                     'C':[7,8,9,4,2,3]})

print (my_df)
  group rank  C
0     A    a  7
1     A    b  8
2     A  NaN  9
3     A  NaN  4
4     B    c  2
5     C  NaN  3

m = my_df['group'] == 'A'
my_df.loc[m, 'rank'] = my_df.loc[m, 'rank'].fillna('A+')

print(my_df)
  group rank  C
0     A    a  7
1     A    b  8
2     A   A+  9
3     A   A+  4
4     B    c  2
5     C  NaN  3

答案 1 :(得分:2)

您需要将其分配回

my_df.loc[my_df['group'] == 'A','rank']=my_df.loc[my_df['group'] == 'A','rank'].fillna('A+')

答案 2 :(得分:1)

您的操作不适当,因此您需要分配回一个变量。此外,不建议使用链式索引。

一个选项是pd.Series.mask,具有布尔系列:

Child