python - 将多列融合为一列

标签 python pandas dataframe jupyter-notebook pandas-melt

我一直在尝试融化这个柱子

d = {'key': [1,2,3,4,5], 'a': ['None','a', 'None','None','None'], 'b': ['None','None','b','None','None'],'c':['None','None','None','c','c']}

df = pd.DataFrame(d)

我需要看起来像这样

<表类="s-表"> <头> 键 <日>信 <正文> 1 无 2 一个 3 b 4 c 5 c

我试过:

df = pd.melt(df,id_vars=['key'], var_name = 'letters')

但是我得到了:

<表类="s-表"> <头> 键 字母 值 <正文> 1 一个 无 2 一个 一个 3 一个 无 4 一个 无 5 一个 无 1 b 无 2 b 无 3 b b 4 b 无 5 b 无 1 c 无 2 c 无 3 c 无 4 c c 5 c c

最佳答案

如果需要在 key 列之后获取每行的第一个非 None 值,请使用 DataFrame.set_index替换可能的 None 字符串,回填缺失值并按位置选择第一列,最后使用 Series.reset_index :

df = (df.set_index('key')
        .replace('None', np.nan)
        .bfill(axis=1)
        .iloc[:, 0]
        .reset_index(name='letter')))
print (df)
   key letter
0    1    NaN
1    2      a
2    3      b
3    4      c
4    5      c

如果可能,每行使用多个非 None 值:

d = {'key': [1,2,3,4,5], 
     'a': ['None','a', 'None','None','None'], 
     'b': ['None','b','b','None','None'],
     'c':['None','None','None','c','c']}

df = pd.DataFrame(d)

df = (df[['key']].join(df.set_index('key')
        .replace('None', np.nan)
        .stack()
        .groupby(level=0)
        .agg(','.join)
        .rename('letter'), on='key'))
print (df)
   key letter
0    1    NaN
1    2    a,b
2    3      b
3    4      c
4    5      c

或者:

df = (df.set_index('key')
        .replace('None', np.nan)
        .apply(lambda x: ','.join(x.dropna()), axis=1)
        .replace('', np.nan)
        .reset_index(name='letter'))

print (df)
   key letter
0    1    NaN
1    2    a,b
2    3      b
3    4      c
4    5      c

关于python - 将多列融合为一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72801987/

相关文章:

python - 如何避免 conda activate base 在我的 VS Code 编辑器中自动执行?

python - Python中列表列表上的滑动窗口

python - 应用函数并返回多列的最 Pythonic 方法是什么?

python - 如何在 pandas 数据框中执行不同值的累积和

python - Pandas 计算 str 系列中的频率

python - 在 Pandas Read_CSV 中使用 UseCols 时按指定顺序保留列

python - 给定雅可比行列式时,Scipy 的 curve_fit/leastsq 会变慢吗?

python - groupby apply 函数不能处理多个函数

python - ValueError : Length mismatch: Expected axis has 6 elements, 新值有 1 个元素

具有未定义嵌套列表深度的嵌套列表的Python注释类型