【发布时间】:2021-11-30 18:40:51
【问题描述】:
我有以下数据:
import pandas as pd
df = pd.DataFrame({
"id": [1,1,1,2,1,2],
"datetime": [
pd.to_datetime("2020-01-01"),
pd.to_datetime("2020-01-02"),
pd.to_datetime("2020-01-03"),
pd.to_datetime("2020-01-04"),
pd.to_datetime("2020-01-04"),
pd.to_datetime("2020-01-06"),
],
"type": [
"start",
"end",
"start",
"start",
"end",
"end"
]
})
看起来像这样
pid datetime type
0 1 2020-01-01 start
1 1 2020-01-02 end
2 1 2020-01-03 start
3 2 2020-01-04 start
4 1 2020-01-04 end
5 2 2020-01-06 end
并且我想对它们进行分组,即对于每个 pid,开始日期和最近结束日期的组合被分组在一行中。请注意,每个 pid 可能会出现多次。所以期望的结果是:
pid start_date end_date
1 2020-01-01 2020-01-02
1 2020-01-03 2020-01-04
2 2020-01-04 2020-01-06
我想到的第一个方法是循环并执行元素匹配,但这对我来说似乎效率很低。特别是因为数据框有 >1m 条目。 接下来是 pandas groupby,但我找不到任何类似的用例。
有没有更有效的方法来对我描述的数据进行分组?
【问题讨论】:
-
我认为 Pandas 中的任何东西都不会在 1m 数据点上有效,向我们展示您的尝试
标签: python pandas dataframe group-by