【问题标题】:Create new smaller "sub" DataFrameS based on groupby made on "root" Dataframe基于在“根”数据帧上创建的 groupby 创建新的较小的“子”数据帧
【发布时间】:2019-11-13 02:32:52
【问题描述】:

我有一个这样的数据集:

Index        Amount    Currency
01.01.2018   25.0      EUR
01.01.2018   43.5      GBP
01.01.2018   463.0     PLN
02.01.2018   32.0      EUR
02.01.2018   12.5      GBP
02.01.2018   123.0     PLN
03.01.2018   10.0      PLN
03.01.2018   15.0      USD

我想创建一个函数,将这个数据帧拆分为按货币分组的子数据帧(存储在不同的变量中)。需要前。一个变量(类型 Dataframe),它只有欧元货币,一个用于英镑货币,一个用于 PLN 货币,一个用于美元。

所以我想要这样的输出:

对于欧元:

Index        Amount    Currency
01.01.2018   25.0      EUR
02.01.2018   32.0      EUR

英镑:

Index        Amount    Currency
01.01.2018   43.5      GBP
02.01.2018   12.5      GBP

对于 PLN:

Index        Amount    Currency
01.01.2018   463.0     PLN
02.01.2018   123.0     PLN
03.01.2018   10.0      PLN

对于美元:

Index        Amount    Currency
03.01.2018   15.0      USD

主要问题是我正在寻找一个干净的代码行来做到这一点。当然可以玩一些 for's 和 if's 但我的目标是获得一个简洁的代码。

PS。

是否可以在不声明货币变量的情况下做到这一点? 我想避免为每种货币声明 40 个变量。因为这个例子被简化了,实际上 df 有大量的货币并且它们没有以任何方式排序,并且不是每天都有所有的货币。 当然,这个 PS 只是对我的问题的优化,所以如果它不可能也没关系。

【问题讨论】:

  • #INDEX 是按日期排序的,所以这不是问题

标签: python pandas dataframe


【解决方案1】:

您可以groupby,从返回的key/value 对中构建tuple 并构建字典:

dfs = dict(tuple(df.groupby('Currency')))

您可以使用Currency 字段(现在是字典的keys)中的不同值访问不同的元素:

print(dfs['EUR'])

        Index  Amount Currency
0  01.01.2018    25.0      EUR
3  02.01.2018    32.0      EUR

print(dfs['USD'])

        Index  Amount Currency
7  03.01.2018    15.0      USD

【讨论】:

    【解决方案2】:

    字典理解将是这里的答案:

    d = {a: b for a, b in df.groupby('Currency')}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-29
      • 2019-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-29
      相关资源
      最近更新 更多