使用 pandas DataFrame.explode() 后如何创建新的“索引”列?
Posted
技术标签:
【中文标题】使用 pandas DataFrame.explode() 后如何创建新的“索引”列?【英文标题】:How to create a new 'index' column after using pandas DataFrame.explode()? 【发布时间】:2021-08-21 22:33:39 【问题描述】:我正在使用 DataFrame.explode() 取消嵌套一列列表,以便每个元素都有自己的行。我想知道的是如何创建一个新的“索引”列,该列将对应于原始列表中元素的索引。在示例中,我将此列称为“循环”。
我希望在下面附上我正在努力实现的目标的图片。如果已经有这个页面,请分享。谢谢!
【问题讨论】:
【参考方案1】:在explode
之后使用groupby cumcount
:
df = df.explode('value').reset_index(drop=True)
df['cycle'] = df.groupby('sample').cumcount() # Enumerate Groups
df = df[['sample', 'cycle', 'value']] # Reorder columns
或insert
:
df = df.explode('value').reset_index(drop=True)
df.insert(1, 'cycle', df.groupby('sample').cumcount()) # Insert New Column
或assign
:
df = (
df.explode('value')
.assign(cycle=lambda x: x.groupby(level=0).cumcount())
.reset_index(drop=True)[['sample', 'cycle', 'value']]
)
df
:
sample cycle value
0 A 0 2
1 A 1 3
2 A 2 5
3 A 3 2
4 A 4 3
5 A 5 6
6 A 6 8
7 B 0 97
8 B 1 83
9 B 2 5
10 C 0 2.5
11 C 1 6
12 C 2 7
13 C 3 9
【讨论】:
非常感谢!第一种方法对我有用。我的数据比我提供的示例要复杂一些,但基本上我所要做的就是添加另一列:即df.groupby(['col1', 'col2']).cumcount()
以上是关于使用 pandas DataFrame.explode() 后如何创建新的“索引”列?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我使用 modin.pandas 比使用 Pandas 需要更长的时间 [ray]
pandas使用字典列表创建dataframe(list of dictionaries)pandas使用字典数据创建dataframe(dictionary)