Python melt dataframe 基于逗号分隔的字符向量列的值

标签 python pandas dataframe

我目前正在进行一项测试,其中我有不同的区域和一些相关的统计数据,以及位于这些区域的以逗号分隔的基因列表。此列表的数量是可变的,并且可能不包含任何内容 ("NA")。

我怎样才能“融化”这个数据框:

 region_id  statistic      genelist
          1        2.5       A, B, C
          2        0.5    B, C, D, E
          3        3.2          <NA>
          4        0.1          E, F

像这样:

     region_id  statistic gene
           1       2.5    A
           1       2.5    B
           1       2.5    C
           2       0.5    B
           2       0.5    C
           2       0.5    D
           2       0.5    E
           3       3.2 <NA>
           4       0.1    E
           4       0.1    F

最佳答案

使用下面的代码,使用stack进行堆叠,拆分后在','上,然后再次堆叠,因为我们堆叠了两次,使用unstack 使用 -2 取消堆叠,然后使用 reset_index-1 重置索引,然后执行最后的 reset_index 没有参数:

print(df.set_index(['region_id', 'statistic'])
   .stack()
   .str.split(', ', expand=True)
   .stack()
   .unstack(-2)
   .reset_index(-1, drop=True)
   .reset_index()
)

关于Python melt dataframe 基于逗号分隔的字符向量列的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55016520/

相关文章:

python - 如何为每个按钮设置不同的文本,而不是完全相同

python - Pandas 在列中找不到元素

Python:在特定位置将行插入数据帧的更快方法?

python - Postgresql:如何将多个列从一个表复制到另一个表?

Python win32com 选择范围

python - 替换列并扩展 DataFrame 中的索引

python - Pandas——用随机正态变量和另一列的平均值填充 pandas 列

python - 根据不同的列值分配唯一值

python - 子集数据帧 : taking previous value from the original df but not in the subset

python - Pandas .at 与 .loc