Pandas:显示来自两个不同时间序列的按日期顺序分组在同一 ID 下的列表中的事件
Pandas: Display events in lists grouped under same ID in date order from two different time series
我有两个数据框对应两个不同的事件。
Event A :
Person_Id | Event_A_Date (yyyy-mm-dd) | A_Reason (The suffix denotes whether X belongs to event A or B)
1 2020-04-01 X_A
2 2020-03-29 X_A
1 2020-04-02 Y_A
3 2020-03-28 Z_A
2 2020-04-01 Z_A
Event B :
Person Id | Event_B_Date(yyyy-mm-dd) | B_Reason
1 2020-04-03 Z_B
2 2020-03-30 Y_B
3 2020-03-29 X_B
只有 Person_Id 列是两个 DF 共有的。
现在,对于每个人的 ID,我想要按照事件发生的顺序(按日期)对应于事件 A 或 B 的原因列表。
也就是说,我想要的输出是:
Person_Id | Event_sequence
1 [X_A, Y_A, Z_B]
2 [X_A, Y_B, Z_A]
3 [Z_A, X_B]
我正在努力使用 Python 获得此输出,因为 Person_ID 是两个数据帧中唯一的公共列。
有人可以帮我使用 python 得到这个输出吗?
您可以按照以下步骤进行:
(假设 df1
是 Event A
的数据帧,df2
是 Event B
的数据帧)
1)统一2个dataframes的列名
df1a = df1.copy()
df1a.columns = ['Person_Id', 'Event_Date' ,'Reason']
df2a = df2.copy()
df2a.columns = ['Person_Id', 'Event_Date' ,'Reason']
2) 将 2 个新数据帧与 .append()
合并
df = df1a.append(df2a)
3) 使用 Person_Id
和 Event_Date
对组合数据框进行排序:
df = df.sort_values(['Person_Id', 'Event_Date'])
Person_Id Event_Date Reason
0 1 2020-04-01 X_A
2 1 2020-04-02 Y_A
0 1 2020-04-03 Z_B
1 2 2020-03-29 X_A
1 2 2020-03-30 Y_B
4 2 2020-04-01 Z_A
3 3 2020-03-28 Z_A
2 3 2020-03-29 X_B
4)通过.groupby()
和.agg
创建想要的布局,如下:
df_out = df.groupby('Person_Id')['Reason'].agg(list).reset_index(name='Event_sequence')
结果:
print(df_out)
Person_Id Event_sequence
0 1 [X_A, Y_A, Z_B]
1 2 [X_A, Y_B, Z_A]
2 3 [Z_A, X_B]
我有两个数据框对应两个不同的事件。
Event A :
Person_Id | Event_A_Date (yyyy-mm-dd) | A_Reason (The suffix denotes whether X belongs to event A or B)
1 2020-04-01 X_A
2 2020-03-29 X_A
1 2020-04-02 Y_A
3 2020-03-28 Z_A
2 2020-04-01 Z_A
Event B :
Person Id | Event_B_Date(yyyy-mm-dd) | B_Reason
1 2020-04-03 Z_B
2 2020-03-30 Y_B
3 2020-03-29 X_B
只有 Person_Id 列是两个 DF 共有的。
现在,对于每个人的 ID,我想要按照事件发生的顺序(按日期)对应于事件 A 或 B 的原因列表。
也就是说,我想要的输出是:
Person_Id | Event_sequence
1 [X_A, Y_A, Z_B]
2 [X_A, Y_B, Z_A]
3 [Z_A, X_B]
我正在努力使用 Python 获得此输出,因为 Person_ID 是两个数据帧中唯一的公共列。
有人可以帮我使用 python 得到这个输出吗?
您可以按照以下步骤进行:
(假设 df1
是 Event A
的数据帧,df2
是 Event B
的数据帧)
1)统一2个dataframes的列名
df1a = df1.copy()
df1a.columns = ['Person_Id', 'Event_Date' ,'Reason']
df2a = df2.copy()
df2a.columns = ['Person_Id', 'Event_Date' ,'Reason']
2) 将 2 个新数据帧与 .append()
df = df1a.append(df2a)
3) 使用 Person_Id
和 Event_Date
对组合数据框进行排序:
df = df.sort_values(['Person_Id', 'Event_Date'])
Person_Id Event_Date Reason
0 1 2020-04-01 X_A
2 1 2020-04-02 Y_A
0 1 2020-04-03 Z_B
1 2 2020-03-29 X_A
1 2 2020-03-30 Y_B
4 2 2020-04-01 Z_A
3 3 2020-03-28 Z_A
2 3 2020-03-29 X_B
4)通过.groupby()
和.agg
创建想要的布局,如下:
df_out = df.groupby('Person_Id')['Reason'].agg(list).reset_index(name='Event_sequence')
结果:
print(df_out)
Person_Id Event_sequence
0 1 [X_A, Y_A, Z_B]
1 2 [X_A, Y_B, Z_A]
2 3 [Z_A, X_B]