根据在“根”数据框上创建的groupby创建新的较小的“子”数据框

时间:2019-07-02 12:30:35

标签: python pandas dataframe

我有一个像这样的数据集:

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

我想创建一个函数,该函数将将此数据帧拆分为按货币分组的子数据帧(存储在不同的变量中)。需要前。一个变量(数据框类型),仅包含EUR货币,一个包含GBP货币,一个包含PLN货币,一个包含USD。

所以我想要这样的输出:

欧元:

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和if,但是我的目标是获得一个简洁的代码。

PS。

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

2 个答案:

答案 0 :(得分:2)

字典理解将是答案:

ManyToManyField

答案 1 :(得分:2)

您可以https://www.geeksforgeeks.org/python-find-smallest-element-greater-than-k/,从返回的tuple / key对中构建value并构建字典:

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