我正在尝试执行以下操作:当'内容'的值是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时,我可以做同样的事情吗?非常感谢!
答案 0 :(得分:2)
使用client.contact_verified?
contact_verified?
编辑
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
分配后
df.ffill()
Out[487]:
content target
0 1.0 0
1 3.0 1
2 6.0 0
3 6.0 2
4 1.0 4
5 59.0 5
6 59.0 5
让我再次编辑
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