【问题标题】:How to create dataframes iterating over a set?如何创建迭代集合的数据框?
【发布时间】:2018-12-24 06:25:57
【问题描述】:

我有这个数据框:

d = {'city':['Barcelona','Madrid','Rome','Torino','London','Liverpool','Manchester','Paris'],
'country': ['ES','ES','IT','IT','UK','UK','UK','FR'],
'revenue': [1,2,3,4,5,6,7,8],
'amount': [8,7,6,5,4,3,2,1]
df = pd.DataFrame(d)

我想为每个国家/地区获取这个:

españa = {'city':['Barcelona','Madrid']
          'revenue':[1,2]
          'amount':[8,7]}
 ES = pd.DataFrame(españa)

所以最后我将有 4 个数据框,分别命名为 ES、IT、UK 和 FR。

到目前为止我已经尝试过了:

a = set(df.loc[:]["country"])
for country in a:
    country = df.loc[(df["country"]== country),['date','sum']]

但这只给了我一个具有一个值的数据框。

【问题讨论】:

    标签: python pandas loops set


    【解决方案1】:

    您可以通过groupby 使用字典推导:

    res = {k: v.drop('country', 1) for k, v in df.groupby('country')}
    
    print(res)
    
    {'ES':    amount       city  revenue
           0       8  Barcelona        1
           1       7     Madrid        2,
     'FR':    amount   city  revenue
           7       1  Paris        8,
     'IT':    amount    city  revenue
           2       6    Rome        3
           3       5  Torino        4,
     'UK':    amount        city  revenue
           4       4      London        5
           5       3   Liverpool        6
           6       2  Manchester        7}
    

    【讨论】:

      【解决方案2】:

      Country 是一个被覆盖的迭代器变量。

      为了生成 4 个不同的数据帧,请尝试使用生成器函数。

      def country_df_generator(data): for country in data['country']unique(): yield df.loc[(df["country"]== country), ['date','sum']] countries = country_df_generator(data)

      【讨论】:

      • 我已经尝试过您的解决方案,但它不起作用。我可以运行代码,但根本没有获得数据帧(或变量)。如果我打印国家/地区,我会得到 。国家的类型是发电机。
      • 是的,它返回一个生成器对象。如果您遍历生成器,它将生成所需的对象countries = list(country_df_generator(data)) 会给您一个有形的列表,因为这是您喜欢的。
      【解决方案3】:

      循环给了你所有四个数据帧,但是你把前三个扔进了垃圾箱。

      您使用变量country 遍历a,然后在下一条语句country = ... 中销毁该值。然后您返回循环顶部,将country 重置为下一个两个字母的缩写,并在所有四个国家/地区继续这场冲突。

      如果您需要四个数据框,则需要将每个数据框保存在单独的位置。例如:

      a = set(df.loc[:]["country"])
      df_dict = {}
      
      for country in a:
          df_dict[country] = df.loc[(df["country"]== country),['date','sum']]
      

      现在您有了一个包含四个数据框的字典,每个数据框都由其国家代码索引。 这有帮助吗?

      【讨论】:

        猜你喜欢
        • 2018-11-21
        • 2019-11-29
        • 2011-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-13
        • 1970-01-01
        • 2021-12-09
        相关资源
        最近更新 更多