用“目标行”替换dataframe中的值

2024-04-20 04:26:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试执行以下操作:当“content”的值为NaN时,用目标行的值替换它的值。下面是我的代码,它通过遍历所有行来实现这一点,但它既丑陋又缓慢。我想应该有一个更优雅/快速的方法来做这个面具,所以我想有人可能会在这方面启发我:

Inputs:

import pandas as pd
d = {'content': [1, 3, None, 6, 1, 59, None], 'target': [0,1,0,2,4,5,4]}
df = pd.DataFrame(data=d)
print(df)
for index, row in df.iterrows():
    if df.loc[index,'content']!=df.loc[index,'content']: # To detect NaN
        df.loc[index,'content']=df.loc[df.loc[index,'target'],'content']
print(df)

outputs:
       content  target
    0      1.0       0
    1      3.0       1
    2      NaN       0
    3      6.0       2
    4      1.0       4
    5     59.0       5
    6      NaN       4

       content  target
    0      1.0       0
    1      3.0       1
    2      1.0       0
    3      6.0       2
    4      1.0       4
    5     59.0       5
    6      1.0       4

提前谢谢!在

注意:只有当该行的内容为“NaN”时,才需要将该行的内容更改为目标行的内容。在

另外一个问题:当内容是59或6时,我能做同样的事情吗?谢谢!在


Tags: 方法代码none内容target目标dfindex
1条回答
网友
1楼 · 发布于 2024-04-20 04:26:06

通过使用fillna

df.content=df.content.fillna(df.target)
df
Out[268]: 
   content  target
0      1.0       0
1      3.0       1
2      6.0       0
3      2.0       2
4      1.0       4
5     59.0       5
6      5.0       5

编辑

^{pr2}$

我想你需要这个

df.content.reindex(df.target)
Out[492]: 
target
0     1.0
1     3.0
0     1.0
2     6.0
4     1.0
5    59.0
5    59.0
Name: content, dtype: float64

分配回来后

df.content=df.content.reindex(df.target).values
df
Out[494]: 
   content  target
0      1.0       0
1      3.0       1
2      1.0       0
3      6.0       2
4      1.0       4
5     59.0       5
6     59.0       5

让我再编辑一次

df.content.fillna(df.content.reindex(df.target).reset_index(drop=True))
Out[508]: 
0     1.0
1     3.0
2     1.0
3     6.0
4     1.0
5    59.0
6     1.0
Name: content, dtype: float64

相关问题 更多 >