问题描述
获得以下数据框:
A B
Temp1 1
Temp2 2
NaN NaN
NaN 4
由于A和B相互关联,因此我可以创建新列,在其中计算A和B的nan值并形成一个元组:
A B C
Temp1 1 (1,Temp1)
Temp2 2 (2,Temp2)
NaN NaN (3,Temp3)
NaN 4 (4,Temp4)
现在,我必须删除列C并填充与列对应的Nan值。
解决方法
将Series.fillna
用于元组中的选择值,方法是使用str
进行索引,最后删除C
列:
#if values are not in tuples
#df.C = df.C.str.strip('()').str.split(',').apply(tuple)
df.A = df.A.fillna(df.C.str[1])
df.B = df.B.fillna(df.C.str[0])
df = df.drop('C',axis=1)
print (df)
A B
0 Temp1 1
1 Temp2 2
2 Temp3 3
3 Temp4 4
或者使用DataFrame.pop
从C
创建DataFrame以供使用并删除列,设置新列名称并传递给DataFrame.fillna
:
#if values are not in tuples
#df.C = df.C.str.strip('()').str.split(',').apply(tuple)
df[['A','B']] = df[['A','B']].fillna(pd.DataFrame(df.pop('C').tolist(),columns=['B','A']))
print (df)
A B
0 Temp1 1
1 Temp2 2
2 Temp3 3
3 Temp4 4