python - 如何在 Python 中将 pandas groupby 应用于多个列并聚合元组列表中的列?
问题描述
我有一个熊猫数据框,可以说:
data = {"action" : ["create_ticket", "create_ticket", "create_ticket"],
"start" : ["2016-01-02", "2016-01-02", "2016-01-21"],
"end" : ["2016-01-04", "2016-01-05", "2016-01-28"],
"duration": [2, 3, 7]
}
df = pd.DataFrame (data, columns = ["action", "start", "end", "duration"])
看起来像:
action start end duration
0 create_ticket 2016-01-02 2016-01-04 2
1 create_ticket 2016-01-02 2016-01-05 3
2 create_ticket 2016-01-21 2016-01-28 7
现在,我想将前两列(action
和)分组,然后start
将这两列聚合到一个元组列表中。所以我想要的输出看起来像:end
duration
action start endpoints
0 create_ticket 2016-01-02 [(2016-01-04, 2), (2016-01-05, 3)]
2 create_ticket 2016-01-21 [(2016-01-28, 7)]
我尝试执行:
df = df.groupby(['action', 'start'])['end', 'duration'].apply(list).to_frame()
df.reset_index(inplace=True)
但这给出了:
action start 0
0 create_ticket 2016-01-02 [end, duration]
1 create_ticket 2016-01-21 [end, duration]
如何解决这个问题?
解决方案
用于:df.apply
_df.values
In [43]: df.groupby(['action', 'start'])[['end', 'duration']].apply(lambda x: tuple(x.values))
Out[43]:
action start
create_ticket 2016-01-02 ([2016-01-04, 2], [2016-01-05, 3])
2016-01-21 ([2016-01-28, 7],)
dtype: object
推荐阅读
- java - 如何使用按钮在标签中显示结果
- java - 根据属性名称动态调用 Get 方法
- python - iloc 函数在 iris 数据集中做了什么?
- python - Python set 和 dict 在迭代时如何知道下一个元素,因为它没有索引?
- android - Android房间从列中查找行
- java - 使用命令提示符/终端启动 Java 可执行文件 - 批处理/Shell/命令文件
- .net-core - 如何将 c# dotnet core 3.1 微服务流绑定到涡轮服务器流
- linux - 卸载 Linux Brew 后摆脱 bash 登录消息
- java - 如何在我现有的项目中使用 AgoraLive 完整 SDK
- c# - 如何在 Unity 中实现像这款游戏一样的玩家运动?