繁体   English   中英

Pandas Dataframe替换系列中的值

[英]Pandas Dataframe replace values in a Series

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

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

但是,这不是持久性...例如:my_df仍然有NaN或NaT ......我不知道如何在in_place中执行此操作。 请告知如何将更新保留到my_df。

创建布尔掩码并分配给筛选的列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

您需要将其分配回来

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

您的操作不在原地,因此您需要分配回变量。 此外,不建议使用链式索引。

一个选项是带有布尔系列的pd.Series.mask

# data from @jezrael

df['rank'].mask((df['group'] == 'A') & df['rank'].isnull(), 'A+', inplace=True)

print(df)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM