我有一个像这样的小盒子:

ID  TradeDate    party    Deal   Asset  Start       Expire      Fixed   Quantity  MTM      Float
1   04/11/2024   party1   Sell   HO     01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
1   04/11/2024   party1   Sell   HO     01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
1   04/11/2024   party1   Sell   HO     01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
1   04/11/2024   party1   Buy    HO     01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
1   04/11/2024   party1   Buy    HO     01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
1   04/11/2024   party1   Sell   WTI    01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
1   04/11/2024   party1   Sell   WTI    01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
1   04/11/2024   party1   Buy    WTI    01/01/2024  02/01/2024  10.00   1000     2500.00   10.00

我按照开始、assets资源 和交易对数据进行分组,然后执行计算,将数据转换为以下内容:

groups = df.groupby(['Start', 'Asset', 'Deal'])

ID  TradeDate    party    Deal   Asset  Start       Expire      Fixed   Quantity  MTM      Float
1   04/11/2024   party1   Sell   HO     01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
1   04/11/2024   party1   Sell   HO     01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
1   04/11/2024   party1   Sell   HO     01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
total                                                                   3000     7500.00   

ID  TradeDate    party    Deal   Asset  Start       Expire      Fixed   Quantity  MTM      Float
1   04/11/2024   party1   Buy    HO     01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
1   04/11/2024   party1   Buy    HO     01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
total                                                                   3000     5000.00   

ID  TradeDate    party    Deal   Asset  Start       Expire      Fixed   Quantity  MTM      Float
1   04/11/2024   party1   Sell   WTI    01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
1   04/11/2024   party1   Sell   WTI    01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
total                                                                   3000     5000.00   

ID  TradeDate    party    Deal   Asset  Start       Expire      Fixed   Quantity  MTM      Float
1   04/11/2024   party1   Buy    WTI    01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
total                                                                   1000     2500.00   

我的目标是下次转换这些组,以便我可以只输出我需要的数据.此步骤的预期输出应如下所示:

party   Deal  Asset Start        MTM       Float
party1  Sell  HO    01/01/2024   7500.00   10.00 
party1  Buy   HO    01/01/2024   5000.00   10.00
party1  Sell  WTI   01/01/2024   5000.00   10.00
party1  Buy   WTi   01/01/2024   2500.00   10.00                                                         

我需要再表演一次吗?或者有没有其他功能可以达到这个目的?任何建议都会有帮助.

注意:在第二步中,这些是来自列表的单个子帧.您可能需要一个中间步骤来将它们合并在一起,然后得到最终的输出.

推荐答案

你只需要pd.Groupby + .agg:

out = df.groupby(["Start", "Asset", "Deal"], sort=False, as_index=False).agg(
    {"party": "first", "MTM": "sum", "Float": "first"}
)
print(out)

打印:

        Start Asset  Deal   party     MTM  Float
0  01/01/2024    HO  Sell  party1  7500.0   10.0
1  01/01/2024    HO   Buy  party1  5000.0   10.0
2  01/01/2024   WTI  Sell  party1  5000.0   10.0
3  01/01/2024   WTI   Buy  party1  2500.0   10.0

Python相关问答推荐

使用plotnine和Python构建地块

通过优化空间在Python中的饼图中添加标签

如何避免Chained when/then分配中的Mypy不兼容类型警告?

将数据框架与导入的Excel文件一起使用

如何找到满足各组口罩条件的第一行?

如何在Python中并行化以下搜索?

driver. find_element无法通过class_name找到元素'""

在Python中,从给定范围内的数组中提取索引组列表的更有效方法

如何更新pandas DataFrame上列标题的de值?

Polars将相同的自定义函数应用于组中的多个列,

在输入行运行时停止代码

递归函数修饰器

如何在验证文本列表时使正则表达式无序?

如何使用matplotlib查看并列直方图

如何重新组织我的Pandas DataFrame,使列名成为列值?

提取最内层嵌套链接

从列表中分离数据的最佳方式

如果列包含空值,则PANAS查询不起作用

如何在Polars中将列表中的新列添加到现有的数据帧中?

#将多条一维曲线计算成其二维数组(图像)表示