python - Dataframe:无法用 DF 中的其他元素替换元素

标签 python pandas dataframe

我已使用 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”的值没有丢失:)

最佳答案

我认为您需要 fillnavalues[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/

相关文章:

python - 有没有一种简单的方法可以在 Python 中操作 XML 文档?

Python:将字典存储在多个 json 文件中

python - 组合发电机

r - 从每一行转置从 json 获得的数据帧

python - 制作 OpenSSL key 时要为 commonName 添加什么?

python - 如何在不输入所有列名称的情况下使用 pyodbc 执行许多插入?

python - Pandas:使用 read_json 读取大 bz2 文件的前 x block 或行

python - 如何将 pandas DataFrame 转换为 TimeSeries?

python - 将样式对象导出到 csv 时出现 pandas 数据框错误

python - 如何在 python 中用数据框中的随机整数替换 0?