基于唯一 ID 遍历 pandas 数据框
Traversing a pandas dataframe based on unique ids
假设我有这个数据框:
df = pd.DataFrame(
[[1,2.2,3.1],[1,1.5,4.2],[1,3.6,7.0],
[2,1.9,9.8],[2,3.0,7.1],
[3,1.1,2.2],[3,4.4,5.6],[3,2.1,1.2]],
columns=['id', 'A', 'B'])
df
id A B
0 1 2.2 3.1
1 1 1.5 4.2
2 1 3.6 7.0
3 2 1.9 9.8
4 2 3.0 7.1
5 3 1.1 2.2
6 3 4.4 5.6
7 3 2.1 1.2
然后我需要一种方法来横穿这个数据框,通过唯一 id
.
对行集合执行一些汇总计算
类似于:
df1, df2, df3 = df.groupby('id')
但这样做是不可能的,因为:
- 有超过
1000
个独特的 ids
,
- 上面的return值是一个元组,需要一个dataframe。
预计:
df1
id A B
0 1 2.2 3.1
1 1 1.5 4.2
2 1 3.6 7.0
df2
id A B
3 2 1.9 9.8
4 2 3.0 7.1
df3
id A B
5 3 1.1 2.2
6 3 4.4 5.6
7 3 2.1 1.2
我该怎么做?
您可以尝试 dataframe.groupby
和 exec
df = [x for _, x in df.groupby('id')]
for i in range(len(df)):
exec(f'df{i} = df[i].reset_index(drop=True)')
输出
df0
id A B
0 1 2.2 3.1
1 1 1.5 4.2
2 1 3.6 7.0
df1
id A B
0 2 1.9 9.8
1 2 3.0 7.1
df2
id A B
0 3 1.1 2.2
1 3 4.4 5.6
2 3 2.1 1.2
假设我有这个数据框:
df = pd.DataFrame(
[[1,2.2,3.1],[1,1.5,4.2],[1,3.6,7.0],
[2,1.9,9.8],[2,3.0,7.1],
[3,1.1,2.2],[3,4.4,5.6],[3,2.1,1.2]],
columns=['id', 'A', 'B'])
df
id A B
0 1 2.2 3.1
1 1 1.5 4.2
2 1 3.6 7.0
3 2 1.9 9.8
4 2 3.0 7.1
5 3 1.1 2.2
6 3 4.4 5.6
7 3 2.1 1.2
然后我需要一种方法来横穿这个数据框,通过唯一 id
.
类似于:
df1, df2, df3 = df.groupby('id')
但这样做是不可能的,因为:
- 有超过
1000
个独特的ids
, - 上面的return值是一个元组,需要一个dataframe。
预计:
df1
id A B
0 1 2.2 3.1
1 1 1.5 4.2
2 1 3.6 7.0
df2
id A B
3 2 1.9 9.8
4 2 3.0 7.1
df3
id A B
5 3 1.1 2.2
6 3 4.4 5.6
7 3 2.1 1.2
我该怎么做?
您可以尝试 dataframe.groupby
和 exec
df = [x for _, x in df.groupby('id')]
for i in range(len(df)):
exec(f'df{i} = df[i].reset_index(drop=True)')
输出
df0
id A B
0 1 2.2 3.1
1 1 1.5 4.2
2 1 3.6 7.0
df1
id A B
0 2 1.9 9.8
1 2 3.0 7.1
df2
id A B
0 3 1.1 2.2
1 3 4.4 5.6
2 3 2.1 1.2