繁体   English   中英

熊猫:处理值后提取索引和列

[英]Pandas: extract index and column after processing values

我有一个类似于此的DF1

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

DF的每个元素都是一个具有以下结构的字符串: BLA, FOO, BAR, ... 我想将其重塑为基于单个元素的DF2 ,将其转换为XA的关联:

       A        B
BLA    X, Y
FOO    X        Y
XY              X
...

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

提前致谢

采用:

  • 为每个列创建按split DataFrame和按stack Series
  • 通过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))

谢谢, 为类似的解决方案:

df1 = (df.stack()
        .str.split(', ', expand=True)
        .stack()
        .reset_index(name='val')
        .groupby(['val','level_1'])['level_0']
        .apply(', '.join)
        .unstack(fill_value='')
        .rename_axis(None)
        .rename_axis(None, 1))
print (df)
         A     B
BAR      Y      
BLA   X, Y      
DD       Z      
DW          X, Y
FOO      X     Y
QOTA           Z
RATM           Z
UVH      Z      
XY             X
ZY             X

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))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM