使用pandas将多个列减少为一个

时间:2018-03-12 19:36:40

标签: python python-3.x pandas

我在DataFrame中有几个列,我想将它们组合成一列:

from functools import reduce # python 3.x
na=pd.np.nan
df1=pd.DataFrame({'a':[na,'B',na],'b':['A',na,na],'c':[na,na,'C']})
print(df1)
     a    b    c
0  NaN    A  NaN
1    B  NaN  NaN
2  NaN  NaN    C

我想要获得的输出看起来像(列名称并不重要):

  a
0 A
1 B
2 C

当我运行这行代码时,我得到ValueError: cannot index with vector containing NA / NaN values

reduce(lambda c1,c2: df1[c1].fillna(df1[c2]),df1.loc[:,'a':'c'])

但是,当我将sequence的{​​{1}}参数更改为仅两列reduce时似乎有效:

df1.loc[:,'a':'b']

我还尝试使用DataFrame / Series reduce(lambda c1,c2: df1[c1].fillna(df1[c2]),df1.loc[:,'a':'b']) 0 A 1 B 2 NaN Name: a, dtype: object 方法,但这会产生相同的错误。 我想尝试让这个工作,以防我想要填补非纳米值

.combine

我认为这不会像我希望的那样工作,因为当我再次限制为两列时,我得到了这个输出:

reduce(lambda c1,c2: df1[c1].combine(df1[c2],(lambda x,y: y if x==pd.np.nan else x)),df1.loc[:,'a':'c'])

2 个答案:

答案 0 :(得分:2)

一种方法是在轴1上使用和

[workspace] Running shell script

+ oc new-build --name=api --binary=true

Unable to connect to the server: Service Unavailable

script returned exit code 1

选项2:使用bfill并选择第一列

df1.fillna('').sum(1)

0    A
1    B
2    C

答案 1 :(得分:0)

这也有效:

pd.DataFrame(data=df.stack().values, index=df.index, columns=['a'])

结果:

    a
0   A
1   B
2   C