在多列 groupby 对象上,如何仅访问外部列?对于例如下面,我可以通过:df.get_group(('media', 'entertainment content'))
命令访问内部列(娱乐内容),我希望能够访问类似:df.get_group(('media'))但它会抛出错误:“ValueError:必须为具有多个分组键的get_group提供元组”
[('media', 'entertainment content'),('media', 'internet media')]
df.get_group(('media', 'entertainment content'))
lasts vol prev ticker
industry sub_industry
media entertainment content 379.200012 1828139 354.000000 suntv
entertainment content 420.049988 2675741 404.600006 z
temp.get_group(('media'))
ValueError: must supply a tuple to get_group with multiple grouping keys
答案 0 :(得分:2)
如果您只想访问“媒体”,则在致电get_group
时不需要额外的括号。所以它只是get_group('media')
。
如果您想要检索多个组,那么您将使用一组额外的括号,这将创建元组。例如:get_group(('media','pizza'))
答案 1 :(得分:0)
只需执行错误消息所说的内容并使用元组:
temp.get_group(('media',))
请注意尾随逗号。
答案 2 :(得分:0)
我试图做类似的事情(为每个子组创建列)。但是,据我所知,下面的方法适合我,也会帮助你。我试图找到大熊猫文档提供的解决方案,但它没有帮助。我建议,这是方式,
grp = df.groupby('industry', 'sub_industry')
values = []
for sub_ind in (df.sub_industry.unique()):
values.append(grp.get_group(('media', sub_ind)))
答案 3 :(得分:0)
与pandas.get_group
一样,在按多个键分组后似乎无法访问单个键,我建议采用以下替代方法。
生成数据框:
import pandas as pd
import numpy as np
rand = np.random.RandomState(1)
df = pd.DataFrame({'A': ['foo', 'bar'] * 12,
'B': rand.randn(24),
'C': rand.randint(0, 20, 24),
'D': ['aaa','bbb','ccc'] * 8})
通过多个键(“ A”和“ D”)分组,并使用pandas.ngroup
分配组号,并将其存储在新列中:
df["grouping_AandD"] = df.groupby(["A", "D"]).ngroup()
使用刚创建的列在循环中显示所有组合,但仅显示包含“需要的键”(在这种情况下为“ foo”)的组合:
wanted_key = "foo"
for i in range(0, df.grouping_AandD.nunique()):
grouped_df = df[df.grouping_AandD == i]
if (grouped_df.A.all() == wanted_key):
print(grouped_df)
答案 4 :(得分:0)
您的代码不起作用的原因是因为您创建了一个具有多个键的组,但是在调用 get_group 方法时,您只使用了一个键(行业),即“媒体”。 @Cashe Staheli 在第二个选项中提到你需要做的事情如下
get_group(('value1','value2'))