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很高兴我能帮忙!