数据帧数组,获取每个数据帧的最大值并以熊猫为单位

时间:2019-09-05 15:37:01

标签: python pandas

我有一个与此相似的数据帧数组:

index   date    profit  required    symbol  category
0   2008-04-01  5.0 3   AA  cat1
1   2008-04-02  4.0 6   AA  cat1
2   2008-04-03  1.0 2   AA  cat1
3   2008-04-04  2.0 3   AA  cat1
4   2008-04-05  3.0 4   AA  cat1
5   2008-04-06  0.0 7   AA  cat1

index   date    profit  required    symbol  category
0   2008-04-01  1.0 3   AA  cat1
1   2008-04-02  1.0 2   AA  cat1
2   2008-04-03  1.0 2   AA  cat1
3   2008-04-04  2.0 3   AA  cat1
4   2008-04-05  3.0 2   AA  cat1
5   2008-04-06  3.0 1   AA  cat1

index   date    profit  required    symbol  category
0   2008-04-01  3.0 1   AB  cat1
1   2008-04-02  5.0 1   AB  cat1
2   2008-04-03  1.0 1   AB  cat1
3   2008-04-04  3.0 3   AB  cat1
4   2008-04-05  3.0 2   AB  cat1
5   2008-04-06  4.0 1   AB  cat1

index   date    profit  required    symbol  category
0   2008-04-01  5.0 1   AC  cat2
1   2008-04-02  4.0 1   AC  cat2
2   2008-04-03  3.0 12  AC  cat2
3   2008-04-04  2.0 1   AC  cat2
4   2008-04-05  3.0 1   AC  cat2
5   2008-04-06  4.0 1   AC  cat2

每个数据框的符号和类别都是唯一的:我将它们分成几列,但它们是单个值,也可以这样使用。

我想做的是针对每个符号和每个类别:

  • 所有利润的简单总和

  • 每个数据帧所需的最大值之和

我可以在纯Python中轻松完成此操作(伪代码:有些事情变得更容易了):

result = {}
for df in dfs:
    result[df.symbol]["profits_generated"] += df["profit"].sum()
    result[df.symbol]["sum_of_max_required"] += df["required"].max()
    # same for category...

我的问题是:可以将其翻译成熊猫吗?它会更有效还是更好地阅读?

我可以做利润总计部分,例如:

pd.concat(dfs).groupby("symbol").sum()["profit"]

但不是每个单个数据帧的最大值之和。

1 个答案:

答案 0 :(得分:3)

您可以在执行keys时添加concat

pd.concat(dfs,keys=range(len(dfs))).groupby([df.index.get_level_values(0),df.symbol])["profit"].max().sum()