我正在使用 DataFrame.explode() 取消嵌套一列列表,以便每个元素都有自己的行。我想知道的是如何创建一个新的“索引”列,该列将对应于原始列表中元素的索引。在示例中,我将此列称为“周期”。
我希望在下面附上一张图片,说明我正在努力实现的目标。如果已经有关于此的页面,请分享。谢谢!
最佳答案
使用groupby cumcount
在 explode
之后:
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
关于python - 如何在使用 pandas DataFrame.explode() 后创建一个新的 'index' 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67827610/