python 串联浮动栏Pandas创建一个新的系列没有楠

qacovj5a  于 2023-02-21  发布在  Python
关注(0)|答案(1)|浏览(89)

我有一个很小的问题,但我无法解决。我有一个很长的数据集(在示例1中有4列(A,B,C,D,E)。

我需要创建一个系列(或新列),它是数据集中其他列(示例中的A、B和D)的垂直连接,忽略每列中的nan。结果(A+B+D)是一个列,其中只有存在的值(不包括nan)被连接。

我所有的数值都是float的,我试过用pd.concat等方法,都没有结果。

df['A+B+D'] = pd.concat([df['A'].notna(), df['B'].notna(), df['D'].notna()], ignore_index = True, axis = 1)

我尝试了其他方法和一些教程,但我不能解决这个问题。

68de4m5k

68de4m5k1#

假设输入DataFrame具有范围索引(如果不是:df = df.reset_index(drop=True)),则可以用途:

s = df[['A', 'B', 'D']].unstack().dropna().reset_index(drop=True).rename('(A+B+D)')

out = df.reindex(s.index).join(s)

输出:

A    B    C    D    E  (A+B+D)
0   3.0  NaN  3.0  2.0  5.0      3.0
1   4.0  2.0  1.0  NaN  2.0      4.0
2   NaN  3.0  3.0  3.0  3.0      5.0
3   5.0  4.0  NaN  3.0  6.0      7.0
4   7.0  5.0  5.0  4.0  NaN      3.0
5   NaN  3.0  4.0  7.0  3.0      2.0
6   3.0  2.0  5.0  4.0  2.0      3.0
7   NaN  NaN  NaN  NaN  NaN      4.0
8   NaN  NaN  NaN  NaN  NaN      5.0
9   NaN  NaN  NaN  NaN  NaN      3.0
10  NaN  NaN  NaN  NaN  NaN      2.0
11  NaN  NaN  NaN  NaN  NaN      2.0
12  NaN  NaN  NaN  NaN  NaN      3.0
13  NaN  NaN  NaN  NaN  NaN      3.0
14  NaN  NaN  NaN  NaN  NaN      4.0
15  NaN  NaN  NaN  NaN  NaN      7.0
16  NaN  NaN  NaN  NaN  NaN      4.0

使用的输入:

df = pd.DataFrame({'A': [3.0, 4.0, nan, 5.0, 7.0, nan, 3.0],
                   'B': [nan, 2.0, 3.0, 4.0, 5.0, 3.0, 2.0],
                   'C': [3.0, 1.0, 3.0, nan, 5.0, 4.0, 5.0],
                   'D': [2.0, nan, 3.0, 3.0, 4.0, 7.0, 4.0],
                   'E': [5.0, 2.0, 3.0, 6.0, nan, 3.0, 2.0]})

相关问题