Pandas从行中获取非空值到一个单元格

时间:2017-08-22 20:03:39

标签: 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

实际上,我会有很多专栏。 提前谢谢!

3 个答案:

答案 0 :(得分:1)

替代方案:

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

答案 1 :(得分:1)

# example data with NaN values
a = pd.DataFrame({'A': [np.nan,2], 'B': [4,np.nan], 'C': [1,2]})
a
     A    B  C
0  NaN  4.0  1
1  2.0  NaN  2

# make new column with non-null values
a['D'] = a.apply(lambda x: [val for val in x if not np.isnan(val)], axis=1)
a
     A    B  C           D
0  NaN  4.0  1  [4.0, 1.0]
1  2.0  NaN  2  [2.0, 2.0]

答案 2 :(得分:1)

您可以按照以下方式执行某些操作:

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(' ','')