Python 将行中的非空值放入一个单元格

Python 将行中的非空值放入一个单元格,python,pandas,Python,Pandas,给定以下数据帧: a = pd.DataFrame({'A': [1,2], 'B': [4,0], 'C': [1,2]}) a A B C 0 1 4 1 1 2 0 2 我想创建一个新列D,其中包含由列分隔的非空值(每行)。像这样: A B C D 0 1 4 1 1,4,1 1 2 0 2 1,0,2 实际上,我会有很多专栏。 提前谢谢 另一种选择: a['D'] = a.apply(l

给定以下数据帧:

a = pd.DataFrame({'A': [1,2], 'B': [4,0], 'C': [1,2]})
a
    A   B   C
0   1   4   1
1   2   0   2
我想创建一个新列
D
,其中包含由列分隔的非空值(每行)。像这样:

    A   B   C    D
0   1   4   1    1,4,1
1   2   0   2    1,0,2
实际上,我会有很多专栏。 提前谢谢

另一种选择:

a['D'] = a.apply(lambda row: ','.join(row.dropna()
          .astype(int).astype(str)), axis=1)

print(a)
   A  B  C      D
0  1  4  1  1,4,1
1  2  0  2  2,0,2

您可以按照以下方式进行操作:

combVals = []
a = a.T
for col in a.columns:
    combVals.append(str(a[col].dropna().astype(int).tolist())[1:-1])
a = a.T
a['D'] = combVals
print(a)
   A  B  C        D
0  1  4  1  1, 4, 1
1  2  0  2  2, 0, 2

您可以通过执行以下操作来删除列
D
中的空格:
a['D']=a['D'].str.replace('',)

似乎需要
df.apply(lambda x:'','.join(x.astype(str))
apply
与lambda和循环一起使用?在pandas 0.20.3中遇到问题,坦率地说,我不确定原因。我刚刚再次测试,同样在0.20.3上,没有问题。你有什么毛病?很奇怪。介意尝试使用
a=pd.DataFrame({'a':[1,2],'B':[4,0],'C':[1,2]},dtype=float)
?我得到一个错误:
ValueError:传递的项目数错误3,放置意味着1
。我刚才把它弄了一下,但不明白为什么当所有的值都不是
NaN
时它会呕吐。我待会再看。很好的观察,有什么想法吗?没有,就像我说的,我有点困惑,因为你的解决方案非常简单。解决方案对这两种情况都有效。
combVals = []
a = a.T
for col in a.columns:
    combVals.append(str(a[col].dropna().astype(int).tolist())[1:-1])
a = a.T
a['D'] = combVals
print(a)
   A  B  C        D
0  1  4  1  1, 4, 1
1  2  0  2  2, 0, 2