我有一个带有两列a
和的DataFrame b
。我想要更改NaN
column中的值b
。例如:对于列中的123的值a
,列同时b
具有abc
和NaN
。我希望两者都更改为abc
:
df
a b
0 123 NaN
1 123 abc
2 456 def
3 456 NaN
我的预期结果是:
df
a b
0 123 abc
1 123 abc
2 456 def
3 456 def
样本数据:
import pandas as pd
from io import StringIO
s = '''\
a,b
123,NaN
123,abc
456,def
456,NaN
'''
df = pd.read_csv(StringIO(s))
描述问题以及我尝试过的事情:
df.loc[df.a == 123, 'b'] = "abc"
在这里,我只能更改为特定值。即,代替'b'
与abc
如果'a'
是123
但对于df.a == 123
与'b'
价值NaN
我也希望它更新abc
。
所以我尝试了
df.loc[df.a == NaN, 'b'] = "abc"
但是,这使所有空列都df
进入abc
。
那么,我该如何进行呢?
编辑2:样本数据2
raw_data = {'a': [123, 123, 456, 456,789], 'b':
[np.nan,'abc','def',np.nan,np.nan], 'c':
[np.nan,np.nan,0,np.nan,np.nan]}
df = pd.DataFrame(raw_data, columns =
['a', 'b','c'])
年份:
df['b'] = df['a'].map(df.groupby('a')['b'].first()).fillna(df['b'])
也许首先对您的数据框进行排序,然后使用ffill
。就像是:
df = df.sort_values(by=['a','b']).fillna(method='ffill')
为此,当您有NaN
不想覆盖的值(“ edit2”)时,还可以使用groupby
:
df['b'] = df.sort_values(by=['a','b','c']).groupby('a')['b'].ffill()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句