Python 在特定日期之前生成熊猫列表的最佳解决方案

Python 在特定日期之前生成熊猫列表的最佳解决方案,python,pandas,Python,Pandas,我有以下数据帧 person_id month firmid 0 1 20 12 1 1 18 10 2 1 15 13 3 2 18 13 4 2 17 11 5 2 15 13 我有一个不同id(person\u id)的人员列表,以及他们在公司工作的月份,以数字的形式。所

我有以下数据帧

    person_id    month  firmid
0   1            20     12
1   1            18     10
2   1            15     13
3   2            18     13
4   2            17     11
5   2            15     13
我有一个不同id(
person\u id
)的人员列表,以及他们在公司工作的月份,以数字的形式。所以id为1的人在20个月内在id为12的公司工作

我想生成一个列表,列出他迄今为止(即当月)工作过的所有公司ID

因此,输出应为:

    person_id    month  firms_worked_at_up_to_current_month
0   1            20     [12,10,13]
1   1            18     [10,13]
2   1            15     [13]
3   2            18     [13,11]
4   2            17     [11,13]
5   2            15     [13]

以上只是一个例子。我的实际文件有数百万行,因此我需要一种不涉及循环的高效方法来完成此操作。

如果您可以对数据帧进行排序,则可以执行以下操作:

# sort by person and month
df = df.sort_values(by=['person_id', 'month'])

# create a unitary list
df['firms'] = df.firmid.apply(lambda x: [x])

# apply cumulative transformation
df['firms'] = df.groupby('person_id')['firms'].transform(lambda x: x.cumsum().apply(set))

print(df)
输出

   person_id  month  firmid         firms
2          1     15      13          {13}
1          1     18      10      {10, 13}
0          1     20      12  {10, 12, 13}
5          2     15      13          {13}
4          2     17      11      {11, 13}
3          2     18      13      {11, 13}

请注意,
firms
列中的最终结果是一个集合,因为您似乎只需要唯一的值。

Nice。也许您可以按人员id和月份对值进行排序,处理单独的数据帧,然后合并back@BKS很高兴我能帮忙!