gpt4 book ai didi

python - 使用 pandas 将多列缩减为一列

转载 作者:行者123 更新时间:2023-12-01 02:04:02 25 4
gpt4 key购买 nike

我想将 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:无法使用包含 NA/NaN 值的向量进行索引:

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

但是,当我将 reducesequence 参数更改为两列时,它似乎起作用了 df1.loc[:,'a':'b ']:

reduce(lambda c1,c2: df1[c1].fillna(df1[c2]),df1.loc[:,'a':'b'])
0 A
1 B
2 NaN
Name: a, dtype: object

我还尝试使用 DataFrame/Series .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'])

我认为这并没有像我希望的那样工作,因为当我再次限制为仅两列时,我得到以下输出:

reduce(lambda c1,c2: df1[c1].combine(df1[c2],(lambda x,y: y if x==pd.np.nan else x)),df1.loc[:,'a':'b'])
0 NaN
1 B
2 NaN
dtype: object

最佳答案

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

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

0 A
1 B
2 C

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

df1.bfill(axis = 1).iloc[:, 0]

关于python - 使用 pandas 将多列缩减为一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49243204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com