从分隔的字符串列创建多级索引熊猫数据框

乔恩·克莱门斯

我有以下内容DataFrame

import pandas as pd

df = pd.DataFrame({
    'col1': ['a, b'],
    'col2': [100]
}, index=['A'])

我想要实现的是通过“爆炸”col1以创建值为col12的多级索引-同时保留col2原始索引的值,例如:

idx_1,idx_2,val
A,a,100
A,b,100

我确定我需要col1.str.split(', ')在其中,但是我对如何创建所需的结果一无所知-也许我需要一个,pivot_table但看不到如何获得所需的索引。

我花了一个半小时的时间来研究有关重塑和旋转等方面的文档。我敢肯定,这是直截了当的-我只是不了解找到“正确的东西”所需的术语。

理查德·斯内普(J Richard Snape)

这里适应第一个答案,这是一种方法。您可能需要使用名称来获得想要的名称。

如果您最终的目标是对非常大的数据帧执行此操作,则可能会有更有效的方法来执行此操作。

import pandas as pd
from pandas import Series

# Create test dataframe
df = pd.DataFrame({'col1': ['a, b'], 'col2': [100]}, index=['A'])

#split the values in column 1 and then stack them up in a big column
s = df.col1.str.split(', ').apply(Series, 1).stack()

# get rid of the last column from the *index* of this stack 
# (it was all meaningless numbers if you look at it)
s.index = s.index.droplevel(-1)

# just give it a name - I've picked yours from OP
s.name = 'idx_2'

del df['col1']  
df = df.join(s)
# At this point you're more or less there

# If you truly want 'idx_2' as part of the index - do this
indexed_df = df.set_index('idx_2', append=True)

使用原始数据帧作为输入,代码将其作为输出:

>>> indexed_df
         col2
  idx_2
A a       100
  b       100

进一步的操作

如果您想给索引指定一些有意义的名称-您可以使用

indexed_df.index.names = ['idx_1','idx_2']

提供输出

             col2
idx_1 idx_2
A     a       100
      b       100

如果您确实希望将索引展平为列,请使用此

indexed_df.reset_index(inplace=True)

提供输出

>>> indexed_df
    idx_1 idx_2  col2
0       A     a   100
1       A     b   100
>>>

更复杂的输入

如果您尝试一个稍微有趣的示例输入-例如

>>> df = pd.DataFrame({
...     'col1': ['a, b', 'c, d'],
...     'col2': [100,50]
... }, index = ['A','B'])

你滚出去:

>>> indexed_df
         col2
  idx_2
A a       100
  b       100
B c        50
  d        50

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从字符串列表创建熊猫数据框

熊猫数据框-多级索引/列

在熊猫数据框中高效存储大字符串列

如何获取熊猫数据框的字符串列表?

根据字符串列值分割熊猫数据框

熊猫数据框中的字符串列操作

熊猫数据框-字符串索引必须为整数-

在多级索引的一级上过滤熊猫数据框

使用多级索引构建新的熊猫数据框

熊猫在多级索引数据框中选择行

从多索引熊猫数据框创建索引

在熊猫中创建具有多级索引的数据透视表

从字符串创建熊猫数据框(CSV格式)

在熊猫数据框中创建可读的字符串

检查字符串列表是否在熊猫数据框列中

Groupby 并加入带有换行符的字符串列的熊猫数据框

熊猫数据框-具有带有字符串列表的列

如何在熊猫数据框中对齐(左)字符串列?

如果熊猫数据框字符串列缺少值,如何将其小写?

熊猫子集数据框中的反向字符串列

将数据框中的字典列表转换为字符串列表 - 熊猫

将字符串列表转换为带有类型的熊猫数据框

为每个熊猫数据框单元格的字符串列表分配唯一值

根据字符串列表过滤大熊猫中的数据框

如何在熊猫数据框的列中使用字符串列表

在熊猫数据框中合并多个可能重复的字符串列

如何在熊猫中创建多级数据框?

如何创建没有多级索引的groupby数据框?

Python:从数据框字符串列中提取维度数据,并为每个列创建值