如何迭代 pandas DataFrameGroupBy 和 select 特定列的每个分组变量的所有条目?
How to iterate over pandas DataFrameGroupBy and select all entries per grouped variable for specific column?
让我们假设,有一个 table 这样的:
Id | Type | Guid
我对这样的 table 执行以下操作:
df = df.groupby('Id')
现在我想遍历前 n
行,并针对每个特定的 Id
作为 list
打印第 Guid
列中的所有相应条目。
请帮我解决一下。
我喜欢为此使用 get_group
。首先你可以拔出钥匙:
In [11]: df
Out[11]:
A B
0 1 2
1 1 4
2 2 6
3 3 8
In [12]: g = df.groupby("A")
In [13]: g.groups.keys()
Out[13]: dict_keys([1, 2, 3])
您可以遍历键:
In [14]: for k in g.groups.keys():
print(g.get_group(k))
print("\n")
A B
0 1 2
1 1 4
A B
2 2 6
A B
3 3 8
要获取 DataFrame 的前 n
项,您可以使用 head
:
In [21]: df.head(3) # or g.get_group(k).head(n)
Out[21]:
A B
0 1 2
1 1 4
2 2 6
注意:groupby还有一个head方法,取每组的前n个:
In [21]: g.head(1)
Out[21]:
A B
0 1 2
2 2 6
3 3 8
我想我会这样做:
创建一些数据进行测试
df = pd.DataFrame({'Id':np.random.randint(1,10,100),'Type':np.random.choice(list('ABCD'),100),'Guid':np.random.randint(10000,99999,100)})
print(df.head()
Id Type Guid
0 2 A 89247
1 4 B 39262
2 3 C 45522
3 1 B 99724
4 4 C 51322
选择 n 作为 return 和 groupby
的记录数
n = 5
df_groups = df.groupby('Id')
使用 for 循环遍历 df_group 并打印
for name,group in df_groups:
print('ID: ' + str(name))
print(group.head(n))
print("\n")
输出:
ID: 1
Id Type Guid
3 1 B 99724
5 1 B 74182
37 1 D 49219
47 1 B 81464
65 1 C 84925
ID: 2
Id Type Guid
0 2 A 89247
6 2 A 16499
7 2 A 79956
34 2 C 56393
40 2 A 49883
.
.
.
编辑要为每个 ID 打印列表中的所有 Guid,您可以使用以下命令:
for name,group in df_groups:
print('ID: ' + str(name))
print(group.Guid.tolist())
print("\n")
输出:
ID: 1
[99724, 74182, 49219, 81464, 84925, 67834, 43275, 35743, 36478, 94662, 21183]
ID: 2
[89247, 16499, 79956, 56393, 49883, 97633, 11768, 14639, 88591, 31263, 98729]
ID: 3
[45522, 13971, 75882, 96489, 58414, 22051, 80304, 46144, 22481, 11278, 84622, 61145]
ID: 4
[39262, 51322, 76930, 83740, 60152, 90735, 42039, 22114, 76077, 83234, 96134, 93559, 87903, 98199, 76096, 64378]
ID: 5
[13444, 55762, 13206, 94768, 19665, 75761, 90755, 45737, 23506, 89345, 94912, 81200, 91868]
.
.
.
让我们假设,有一个 table 这样的:
Id | Type | Guid
我对这样的 table 执行以下操作:
df = df.groupby('Id')
现在我想遍历前 n
行,并针对每个特定的 Id
作为 list
打印第 Guid
列中的所有相应条目。
请帮我解决一下。
我喜欢为此使用 get_group
。首先你可以拔出钥匙:
In [11]: df
Out[11]:
A B
0 1 2
1 1 4
2 2 6
3 3 8
In [12]: g = df.groupby("A")
In [13]: g.groups.keys()
Out[13]: dict_keys([1, 2, 3])
您可以遍历键:
In [14]: for k in g.groups.keys():
print(g.get_group(k))
print("\n")
A B
0 1 2
1 1 4
A B
2 2 6
A B
3 3 8
要获取 DataFrame 的前 n
项,您可以使用 head
:
In [21]: df.head(3) # or g.get_group(k).head(n)
Out[21]:
A B
0 1 2
1 1 4
2 2 6
注意:groupby还有一个head方法,取每组的前n个:
In [21]: g.head(1)
Out[21]:
A B
0 1 2
2 2 6
3 3 8
我想我会这样做:
创建一些数据进行测试
df = pd.DataFrame({'Id':np.random.randint(1,10,100),'Type':np.random.choice(list('ABCD'),100),'Guid':np.random.randint(10000,99999,100)})
print(df.head()
Id Type Guid
0 2 A 89247
1 4 B 39262
2 3 C 45522
3 1 B 99724
4 4 C 51322
选择 n 作为 return 和 groupby
的记录数n = 5
df_groups = df.groupby('Id')
使用 for 循环遍历 df_group 并打印
for name,group in df_groups:
print('ID: ' + str(name))
print(group.head(n))
print("\n")
输出:
ID: 1
Id Type Guid
3 1 B 99724
5 1 B 74182
37 1 D 49219
47 1 B 81464
65 1 C 84925
ID: 2
Id Type Guid
0 2 A 89247
6 2 A 16499
7 2 A 79956
34 2 C 56393
40 2 A 49883
.
.
.
编辑要为每个 ID 打印列表中的所有 Guid,您可以使用以下命令:
for name,group in df_groups:
print('ID: ' + str(name))
print(group.Guid.tolist())
print("\n")
输出:
ID: 1
[99724, 74182, 49219, 81464, 84925, 67834, 43275, 35743, 36478, 94662, 21183]
ID: 2
[89247, 16499, 79956, 56393, 49883, 97633, 11768, 14639, 88591, 31263, 98729]
ID: 3
[45522, 13971, 75882, 96489, 58414, 22051, 80304, 46144, 22481, 11278, 84622, 61145]
ID: 4
[39262, 51322, 76930, 83740, 60152, 90735, 42039, 22114, 76077, 83234, 96134, 93559, 87903, 98199, 76096, 64378]
ID: 5
[13444, 55762, 13206, 94768, 19665, 75761, 90755, 45737, 23506, 89345, 94912, 81200, 91868]
.
.
.