嗨,我有以下数据框
z a b c
a 1 NaN NaN
ss NaN 2 NaN
cc 3 NaN NaN
aa NaN 4 NaN
ww NaN 5 NaN
ss NaN NaN 6
aa NaN NaN 7
g NaN NaN 8
j 9 NaN NaN
我想创建一个新列d来做类似的事情
z a b c d
a 1 NaN NaN 1
ss NaN 2 NaN 2
cc 3 NaN NaN 3
aa NaN 4 NaN 4
ww NaN 5 NaN 5
ss NaN NaN 6 6
aa NaN NaN 7 7
g NaN NaN 8 8
j 9 NaN NaN 9
对于数字,它不是整数。它在np.float64中。整数是清楚的例子。您可能会认为数字类似于32065431243556.62,763835218962767.8谢谢您的帮助
答案 0 :(得分:1)
我们可以将NA替换为0并汇总行。
df['d'] = df[['a', 'b', 'c']].fillna(0).sum(axis=1)
答案 1 :(得分:1)
实际上,不必使用fillna
,sum
可以将NAN
元素自动转换为零。
我也是python新手,我建议也许您应该先阅读熊猫食谱。
代码是:
df['Total']=df[['a','b','c']].sum(axis=1).astype(int)
答案 2 :(得分:0)
您可以在axis=1
上使用pd.DataFrame.ffill
:
df['D'] = df.ffill(1).iloc[:, -1].astype(int)
print(df)
a b c D
0 1.0 NaN NaN 1
1 NaN 2.0 NaN 2
2 3.0 NaN NaN 3
3 NaN 4.0 NaN 4
4 NaN 5.0 NaN 5
5 NaN NaN 6.0 6
6 NaN NaN 7.0 7
7 NaN NaN 8.0 8
8 9.0 NaN NaN 9
当然,如果您有float
个值,则不需要int
转换。
答案 3 :(得分:0)
如果如给定示例所示,每行只有一个值,则可以使用下面的代码为每一行添加dropna并将剩余的值分配给d列
df['d']=df.apply(lambda row: row.dropna(), axis=1)