如何基于多列的值将多行与python pandas合并为单行?

时间:2018-08-17 18:29:28

标签: python pandas

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

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

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

理想情况下,我试图将表转换为如下形式:

IndividualID    DayID     Seq1   TripPurp1     Seq2   TripPur2     Seq3   TripPurp3     Seq4   TripPur4
200100000001    1         1      3             2      31           3       23           4      5
200100000009    1         1      3             2      12           3        4           4      6

如果这不可能,那么以下模式也可以:

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

有没有可能的解决方案?我当时在考虑for loop / while语句,但这也许并不是一个好主意。 预先感谢!

2 个答案:

答案 0 :(得分:1)

您可以尝试:

.json

输出:

.js

答案 1 :(得分:1)

要获得第二个输出,您只需要分组并应用列表:

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

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

要获得第一个输出,可以执行以下操作(可能不是最好的方法):

df2 = pd.DataFrame(df.groupby(['IndividualID', 'DayID'])['TripPurpose'].apply(list))
trip = df2['TripPurpose'].apply(pd.Series).rename(columns = lambda x: 'TripPurpose'+ str(x+1))
df3 = pd.DataFrame(df.groupby(['IndividualID', 'DayID'])['JourSequence'].apply(list))
seq = df3['JourSequence'].apply(pd.Series).rename(columns = lambda x: 'seq'+ str(x+1))
pd.merge(trip,seq,on=['IndividualID','DayID'])

输出未排序