我在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'])
答案 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