如何使用python pandas基于多个列的值将多行合并为一行?

2024-10-01 13:31:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要将多行合并为一行,原始数据帧如下所示:

IndividualID    DayID    TripID    JourSequence   TripPurpose
200100000001    1        1         1              3
200100000001    1        2         2              31
200100000001    1        3         3              23
200100000001    1        4         4              5
200100000009    1        55        1              3
200100000009    1        56        2              12
200100000009    1        57        3              4
200100000009    1        58        4              6
200100000009    1        59        5              19
200100000009    1        60        6              2

我试图建立某种“旅行链”,所以基本上一个人在一天内的所有旅行顺序和旅行目的都应该在同一行中。。。在

理想情况下,我试图将表格转换成如下所示:

^{pr2}$

如果以下模式也不可行,则:

IndividualID    DayID      TripPurposes
200100000001    1          3, 31, 23, 5
200100000009    1          3, 12, 4, 6

有什么可能的解决办法吗?我在考虑for loop/while语句,但这可能不是一个好主意。 提前谢谢!在


Tags: 目的原始数据顺序模式情况表格理想pr2
2条回答

你可以试试:

df_out = df.set_index(['IndividualID','DayID',df.groupby(['IndividualID','DayID']).cumcount()+1]).unstack().sort_index(level=1, axis=1)
df_out.columns = df_out.columns.map('{0[0]}_{0[1]}'.format)
df_out.reset_index()

输出:

^{pr2}$

要获得第二个输出,只需groupby和apply list:

df.groupby(['IndividualID', 'DayID'])['TripPurpose'].apply(list)

                      TripPurpose
IndividualID  DayID 
200100000001    1   [3, 31, 23, 5]
200100000009    1   [3, 12, 4, 6, 19, 2]

要获得第一个输出,您可以这样做(可能不是最佳方法):

^{pr2}$

输出未排序

相关问题 更多 >