我已使用 read_csv 导入数据,并有一个名为 praw 的 DataFrame。它有多个列,例如“TIME”、“COUNTRY”、“Product”和“VALUE”。
在给定选定的年份和国家/地区的情况下,我想用我拥有的产品 2 的数据替换“产品”== 产品 1 的缺失数据。
我使用以下代码
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”的值没有丢失:)
最佳答案
我认为您需要 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
关于python - Dataframe:无法用 DF 中的其他元素替换元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46976026/