我尽可能多地检查了一下。
如果我在 pandas 中使用 groupby
,并且我有一个组,将其命名为 group1
,我如何获取组 1 的名称?
我正在使用 groupby
和 apply
,所以我没有明确地拉组,这就是我需要这样做的原因。
假设 df 由两个事物组成。
df.groupby(['key1','key2'])
我想避免做:
group1.key1.unique()[0]
group1.key2.unique()[0]
获取名称,因为那很慢..
最佳答案
我不清楚你所说的组名是什么意思。您是指分组依据的列中的值吗?
Apply 将按 groupby 列将数据框分成多个较小的数据框。您分组的列仍在较小的数据框中。那是你追求的吗?
举例说明:
示例数据:
np.random.seed(1)
n=10
df = pd.DataFrame({'mygroups' : np.random.choice(['dogs','cats','cows','chickens'], size=n),
'mygroups2' : np.random.choice(['dogs','cats','cows','chickens'], size=n),
'data' : np.random.randint(1000, size=n)})
print df.head()
data mygroups mygroups2
0 254 cats dogs
1 357 chickens cats
2 914 dogs dogs
3 468 dogs chickens
4 907 chickens cats
让我们将它分组并组成一个愚蠢的函数:
gb = df.groupby(['mygroups','mygroups2'])
def someFunction(ingroup):
print ingroup
return ""
gb.apply(someFunction)
data mygroups mygroups2
7 668 cats cats
data mygroups mygroups2
7 668 cats cats
data mygroups mygroups2
0 254 cats dogs
5 252 cats dogs
data mygroups mygroups2
1 357 chickens cats
4 907 chickens cats
data mygroups mygroups2
6 490 chickens cows
8 925 chickens cows
data mygroups mygroups2
3 468 dogs chickens
data mygroups mygroups2
2 914 dogs dogs
9 398 dogs dogs
Out[718]:
mygroups mygroups2
cats cats
dogs
chickens cats
cows
dogs chickens
dogs
dtype: object
因此您可以在生成的打印输出中看到 apply
的每次迭代都会获取输入数据帧的所有列。
编辑:
我不确定如何从 apply
中获取键元组,但我可以从循环中获取:
for eachgroup in gb:
print 'this group key = ' + str( eachgroup[0] )
print 'this group values = '
print eachgroup[1]
关于python - 使用 Pandas 按键获取组名的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27003175/