如何根据条件从一个原始df中创建多个df,然后为其分配单独的名称

时间:2020-04-10 19:06:09

标签: python pandas

df_collection = {}
for country in country_names:
   df_collection[country] = df.loc[df['CountryName'] == country].copy

我想在一个原始df中创建几个df(每个国家约70个)(每个国家的频率不同),然后为它们分配一个单独的名称(因此我使用了字典)。但是我无法再访问单个df。它们应具有不同的名称,并应保留为数据框。 错误:“方法”对象不可下标

有人可以解决吗?

1 个答案:

答案 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