Pandas:处理值后提取索引和列

2024-04-18 19:09:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个DF1类似于:

    A            B
X   BLA, FOO     XY, ZY, DW     
Y   BAR, BLA     FOO, DW
Z   UVH, DD      RATM,QOTA

DF的每个元素都是一个具有以下结构的字符串:BLA, FOO, BAR, ...。我想根据单个元素将其重塑为DF2,将其转换为X和{}的关联:

^{pr2}$

如您所见,DF1的每个元素都显示了索引和列之间的关联。有没有比逐行逐列阅读更实用的方法呢?或者,如何从pd.DF.applymap()得到index和{}?在

提前谢谢


Tags: 字符串元素dffoobar结构dddf1
1条回答
网友
1楼 · 发布于 2024-04-18 19:09:43

使用:

  • 对于每一列,创建DataFrame,由split创建,Series按stack创建
  • stack对序列进行整形-所有拆分的值都在一列中
  • 通过reset_indexMultiIndex转换为列
  • 对唯一的MultiIndex按重复对分组,对重复项使用聚合join
  • unstack重塑形状
  • 数据清理-列和索引名按rename_axis

df1 = (df.apply(lambda x: x.str.split(',\s+', expand=True).stack())
       .stack()
       .reset_index(drop=True, level=1)
       .reset_index(name='val')
       .groupby(['val','level_1'])['level_0']
       .apply(', '.join)
       .unstack(fill_value='')
       .rename_axis(None)
       .rename_axis(None, 1))

谢谢,Zero提供类似的解决方案:

^{pr2}$
df1 = (df.stack()
        .str.split(', ', expand=True)
        .stack()
        .reset_index()
        .pivot_table(index=0, 
                     columns='level_1', 
                     values='level_0', 
                     aggfunc=','.join, 
                     fill_value='')
        .rename_axis(None)
        .rename_axis(None, 1))

相关问题 更多 >