我有一个与此相似的数据帧数组:
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"]
但不是每个单个数据帧的最大值之和。
答案 0 :(得分:3)
您可以在执行keys
时添加concat
pd.concat(dfs,keys=range(len(dfs))).groupby([df.index.get_level_values(0),df.symbol])["profit"].max().sum()