我有如下数据:
id value time
1 5 2000
1 6 2000
1 7 2000
1 5 2001
2 3 2000
2 3 2001
2 4 2005
2 5 2005
3 3 2000
3 6 2005
Run Code Online (Sandbox Code Playgroud)
我的最终目标是将数据放在如下列表中:
[[5,6,7],[5]] (this is for id 1 grouped by the id and year)
[[3],[3],[4,5]] (this is for id 2 grouped by the id and year)
[[3],[6]] (same logic as above)
Run Code Online (Sandbox Code Playgroud)
我已经使用df.groupby(['id', 'year']). 但在那之后,我无法访问组并以上述格式获取数据。
sac*_*cuL 14
您可以使用apply(list):
>>> df.groupby(['id', 'time'])['value'].apply(list)
id time
1 2000 [5, 6, 7]
2001 [5]
2 2000 [3]
2001 [3]
2005 [4, 5]
3 2000 [3]
2005 [6]
Name: value, dtype: object
Run Code Online (Sandbox Code Playgroud)
如果你真的想要它显示的确切格式,你可以 groupbyid并list 再次申请,但这效率不高,而且这种格式可以说更难使用......
>>> df.groupby(['id','time'])['value'].apply(list).groupby('id').apply(list).tolist()
[[[5, 6, 7], [5]], [[3], [3], [4, 5]], [[3], [6]]]
Run Code Online (Sandbox Code Playgroud)
tot*_*ico 13
如果要计算多列的列表,可以执行以下操作:
import pandas as pd
df = pd.DataFrame(
{'A': [1,1,2,2,2,2,3],
'B':['a','b','c','d','e','f','g'],
'C':['x','y','z','x','y','z','x']})
df.groupby('A').agg({'B': list,'C': list})
Run Code Online (Sandbox Code Playgroud)
这将计算 B 和 C 的列表:
B C
A
1 [a, b] [x, y]
2 [c, d, e, f] [z, x, y, z]
3 [g] [x]
Run Code Online (Sandbox Code Playgroud)
要获取所有列的列表:
df.groupby('A').agg(list)
Run Code Online (Sandbox Code Playgroud)
要对列表进行排序:
df.groupby('A').agg(sorted)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15903 次 |
| 最近记录: |