我想反转 DataFrame.groupby().agg(list)
。
这是初始数据。
PERSON FOO BAR
0 Maya 12 0
1 Maya 3 1
2 Jim 9 2
3 Jim 7 3
这就是结果 groupby().agg(list)
和更多的工作。
FOO BAR
PERSON
Jim [9, 7] 2 | 3
Maya [12, 3] 0 | 1
我期待这样的结果
PERSON FOO BAR
0 Maya 12 0 | 1
1 Maya 3 0 | 1
2 Jim 9 2 | 3
3 Jim 7 2 | 3
一句话:
FOO
和BAR
中的内容。这是一个完整的 MWE:
#!/usr/bin/env python3
import pandas as pd
df = pd.DataFrame(
{
'PERSON': ['Maya', 'Maya', 'Jim', 'Jim'],
'FOO': [12, 3, 9, 7],
'BAR': range(4)
}
)
print(df)
# Group by Person but keep all content as list's in the cells
dfg = df.groupby('PERSON').agg(list)
# Do some work on the result
dfg.BAR = dfg.BAR.apply(lambda cell: ' | '.join([str(e) for e in cell]))
print(dfg)
答案 0 :(得分:1)
就是这样:
dfg.explode('FOO')