熊猫将非空值从行中获取到一个单元格中[重复]

Posted

技术标签:

【中文标题】熊猫将非空值从行中获取到一个单元格中[重复]【英文标题】:Pandas Get Non-Null Values From Row Into One Cell [duplicate] 【发布时间】:2018-01-31 05:44:57 【问题描述】:

给定以下数据框:

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

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

【问题讨论】:

看来你需要df.apply(lambda x :','.join(x.astype(str)),axis=1) 【参考方案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

【讨论】:

apply 带有一个 lambda 一个循环?【参考方案2】:
# 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]

【讨论】:

在 pandas 0.20.3 中遇到了这个问题,坦率地说,我不知道为什么。 我刚刚再次测试,也是在 0.20.3 上,没有问题。你遇到了什么问题? 很奇怪。介意尝试a = pd.DataFrame('A': [1,2], 'B': [4,0], 'C': [1,2], dtype=float) 然后我得到一个错误:ValueError: Wrong number of items passed 3, placement implies 1。我刚才敲了一下它,但不明白为什么当所有值都不是NaN 时它会出错。我稍后会看看。很好的观察,有什么想法吗? 不,就像我说的那样,我有点难过,因为您的解决方案非常简单。 this 解决方案适用于这两种情况。【参考方案3】:

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

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

【讨论】:

以上是关于熊猫将非空值从行中获取到一个单元格中[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何从行中获取/打印值[重复]

根据“如果单元格中的字符串”条件删除熊猫列中的行

如何在 MS Access 2010 中的单元格中显示空值

excel 如何引用非空单元格中的数据到指定单元格中

列表追加到熊猫单元格中

从行上的单元格值添加前缀