将多列组合为一列Pandas

时间:2018-07-16 08:23:16

标签: python python-3.x pandas dataframe

嗨,我有以下数据框

   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谢谢您的帮助

4 个答案:

答案 0 :(得分:1)

我们可以将NA替换为0并汇总行。

df['d'] = df[['a', 'b', 'c']].fillna(0).sum(axis=1)

答案 1 :(得分:1)

实际上,不必使用fillnasum可以将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)