df_collection = {}
for country in country_names:
df_collection[country] = df.loc[df['CountryName'] == country].copy
我想在一个原始df中创建几个df(每个国家约70个)(每个国家的频率不同),然后为它们分配一个单独的名称(因此我使用了字典)。但是我无法再访问单个df。它们应具有不同的名称,并应保留为数据框。 错误:“方法”对象不可下标
有人可以解决吗?
答案 0 :(得分:2)
您为每个字典键分配了一个方法。您需要使用()
,即df.loc[df['CountryName'] == country].copy()
来调用副本。
但是,不需要在循环中将DataFrame子集化。这正是groupby
的目的,您可以使用以下方式简洁地创建字典:
df_collection = dict(tuple(df.groupby('CountryName')))
之所以可行,是因为groupby对象的__iter__
方法:“返回:每个组的生成器(名称,子对象的生成器)生成序列”,因此使用单个分组键,这些值就成为字典的键
print(df)
# CountryName Data
#0 a 8
#1 c 4
#2 b 4
#3 a 1
#4 a 1
#5 c 7
df_collection = dict(tuple(df.groupby('CountryName')))
## If you care for the subset defined in some list `country_names`, subset first
# df_collection = dict(tuple(df[df.CountryName.isin(country_names)].groupby('CountryName')))
df_collection['a']
# CountryName Data
#0 a 8
#3 a 1
#4 a 1