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