[英]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.