Pandas 行之间的差异作为列中的列表

Pandas 行之间的差异作为列中的列表,pandas,Pandas,我有一个像这样的(混乱的)pd.df Number Day Colour City 123 Monday Red London 234 Monday Blue Paris 234 Wednesday Yellow Paris 345 Tuesday Green Berlin 有没有一种优雅的方法来创建一个新的df,它具有相同的列,但显示两行like['Number']之间

我有一个像这样的(混乱的)pd.df

Number    Day        Colour   City
123       Monday     Red      London
234       Monday     Blue     Paris
234       Wednesday  Yellow   Paris
345       Tuesday    Green    Berlin
有没有一种优雅的方法来创建一个新的df,它具有相同的列,但显示两行like['Number']之间的差异,作为列中的列表。所以期望的输出是这样的

Number    Day                Colour        City
123       Monday             Red           London
234       Monday, Wednesday  Blue, Yellow  Paris
345       Tuesday            Green         Berlin
即使是在正确的方向上的一点,关于哪些功能我应该看将是有益的。我感兴趣的值总是字符串,而不是浮点或整数。非常感谢。

这里有一个方法:

df = (df
     .groupby('Number')
     .agg(','.join)
     .applymap(lambda x: x.split(',') if ',' in x else x)
     .reset_index())

   Number                  Day          Colour            City
0     123               Monday             Red          London
1     234  [Monday, Wednesday]  [Blue, Yellow]  [Paris, Paris]
2     345              Tuesday           Green          Berlin
groupby
agg
注意:
{*s}
返回
中所有内容的
集合
。这确保了我们只加入了独特的事物,并解释了为什么我们得到了
Paris
,而不是
Paris,Paris

df.groupby('Number').agg(lambda s: ', '.join({*s}))

                      Day        Colour    City
Number                                         
123                Monday           Red  London
234     Wednesday, Monday  Blue, Yellow   Paris
345               Tuesday         Green  Berlin

df.groupby('Number', as_index=False).agg(lambda s: ', '.join({*s}))

   Number                Day        Colour    City
0     123             Monday           Red  London
1     234  Wednesday, Monday  Blue, Yellow   Paris
2     345            Tuesday         Green  Berlin