【问题标题】:Merge columns with have \n将列与 have \n 合并
【发布时间】:2020-03-24 06:15:59
【问题描述】:

例如)

   C1  C2  C3  C4  C5  C6
0  A   B   nan C   A   nan
1  B   C   D   nan B   nan
2  D   E   F   nan C   nan
3  nan nan A   nan nan B

我正在合并列,但我想在合并过程中给出 '\n\n'。

所以输出我想要的

   C
0  A  

   B  

   C

   A
1  B  

   C  

   D

   B
2  D  

   E  

   F

   C
3. A

   B

我想让 'nan' 掉线。

我试过了

df['merge'] = df['C1'].map(str) + '\n\n' + tt['C2'].map(str) + '\n\n' + tt['C3'].map(str) + '\n\n' + df['C4'].map(str)

但是,这包括所有 nan 值。

感谢您的阅读。

【问题讨论】:

  • 合并前为什么不用空字符串替换NAN?
  • 这是一个示例数据样本,每行的实际列数不同!我将编辑数据样本。

标签: python pandas dataframe multiple-columns


【解决方案1】:

对系列使用DataFrame.stack,错误值被删除,因此您可以聚合join

df['merge'] = df.stack().groupby(level=0).agg('\n\n'.join)
#for filter only C columns
df['merge'] = df.filter(like='C').stack().groupby(level=0).agg('\n\n'.join)

或者通过 Series.dropna 加入每行来删除缺失值:

df['merge'] = df.apply(lambda x: '\n\n'.join(x.dropna()), axis=1)
#for filter only C columns
df['merge'] = df.filter(like='C').apply(lambda x: '\n\n'.join(x.dropna()), axis=1)

print (df)
    C1   C2   C3   C4   C5   C6             merge
0    A    B  NaN    C    A  NaN  A\n\nB\n\nC\n\nA
1    B    C    D  NaN    B  NaN  B\n\nC\n\nD\n\nB
2    D    E    F  NaN    C  NaN  D\n\nE\n\nF\n\nC
3  NaN  NaN    A  NaN  NaN    B            A\n\nB

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 2019-06-21
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    • 2014-07-29
    相关资源
    最近更新 更多