pandas - 行之间的差异作为列内的列表

标签 pandas

我有一个像这样的(困惑的)pdf.df,

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

有没有一种优雅的方法来制作一个新的 df ,它具有相同的列,但将两行之间的差异显示为列中的列表,例如 ['Number'] 。所以期望的输出是这样的。

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

即使是关于我应该查看哪些功能的正确方向的一点也会有所帮助。我感兴趣的值将始终是字符串而不是 float 或整数。非常感谢。

最佳答案

groupbyagg

注意: {*s} 返回 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

关于pandas - 行之间的差异作为列内的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60211623/

相关文章:

python - 如何比较两个 Pandas DataFrame 并显示 DataFrame 2 中的差异

python - Pandas read_csv : Ignore second header line

python - 根据 CSV 数据对 Python Pandas 组执行多项计算

python - 值错误: X has 231 features per sample; expecting 1228

python 3、pandas 和创建新列失败并出现 keyerror

python - Pandas LOC 选择值背后的逻辑

python - 从 Pandas 数据框中选择行的最快方法?

python - 如何在 Python 中创建条件低于或高于中位数的虚拟变量?

python - Pandas - 在过滤时如何使用变量的值(而不是变量名)作为列名?

python - Pandas 根据条件为每一行创建一个唯一的 id