用"目标行"

时间:2017-12-14 23:03:21

标签: python pandas dataframe

我正在尝试执行以下操作:当'内容'的值是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时,我可以做同样的事情吗?非常感谢!

1 个答案:

答案 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