我使用read_csv导入了数据,并且有一个名为 praw 的DataFrame。它有几列,如'TIME','COUNTRY','PRODUCT'和'VALUE'。
我想将'PRODUCT'== product1的缺失数据替换为我对product2的数据,给定选定的年份和国家。
我使用以下代码
praw.loc[(praw['COUNTRY'] == country) & (praw['TIME'] == year) &
(praw['PRODUCT'] == 'product1'),'Value'] = praw.loc[(praw['COUNTRY'] == country) &
(praw['TIME'] == year) & (praw['PRODUCT'] == 'product2'),'Value']
如果我打印
praw.loc[(praw['COUNTRY'] == country) &
(praw['TIME'] == year) &
(praw['PRODUCT'] == 'product1'),'Value']
我还有NaN。我做错了什么?
我确信'product2'的值不会丢失:)
答案 0 :(得分:1)
我认为您需要使用fillna
values[0]
替换第一个值m2
条件:
m1 = (praw['COUNTRY'] == country) & (praw['TIME'] == year)& (praw['PRODUCT'] == 'product1')
m2 = (praw['COUNTRY'] == country) & (praw['TIME'] == year)& (praw['PRODUCT'] == 'product2')
praw.loc[m1,'Value'] = praw.loc[m1,'Value'].fillna(praw.loc[m2,'Value'].values[0])
样品:
praw = pd.DataFrame({'COUNTRY':list('aaadka'),
'TIME':[4,4,4,5,4,4],
'C':[7,8,9,4,2,3],
'D':[1,3,5,7,1,0],
'Value':[5,np.nan,np.nan,9,np.nan,0],
'PRODUCT':list('aaabbb')})
print (praw)
C COUNTRY D PRODUCT TIME Value
0 7 a 1 a 4 5.0
1 8 a 3 a 4 NaN
2 9 a 5 a 4 NaN
3 4 d 7 b 5 9.0
4 2 k 1 b 4 NaN
5 3 a 0 b 4 0.0
country = 'a'
year = 4
m1 = (praw['COUNTRY'] == country) & (praw['TIME'] == year)& (praw['PRODUCT'] == 'a')
m2 = (praw['COUNTRY'] == country) & (praw['TIME'] == year)& (praw['PRODUCT'] == 'b')
print (m1)
0 True
1 True
2 True
3 False
4 False
5 False
dtype: bool
print (m2)
0 False
1 False
2 False
3 False
4 False
5 True
dtype: bool
print (praw.loc[m2,'Value'].values[0])
0.0
praw.loc[m1,'Value'] = praw.loc[m1,'Value'].fillna(praw.loc[m2,'Value'].values[0])
print (praw)
C COUNTRY D PRODUCT TIME Value
0 7 a 1 a 4 5.0
1 8 a 3 a 4 0.0
2 9 a 5 a 4 0.0
3 4 d 7 b 5 9.0
4 2 k 1 b 4 NaN
5 3 a 0 b 4 0.0