python - Pandas groupby 列表

标签 python list pandas dataframe

我有一个以下格式的 pandas 数据框:

Arrival Departure Park Station Count 
      8        10    5   [1,2]     1
      5        12    6   [3,4]     1
      8        10    5   [1,2]     1

我想按到达、出发、公园和车站对该数据框进行分组,但由于车站是一个列表,因此我收到错误。输出应如下所示:

    Arrival Departure Park Station Count 
        8        10    5   [1,2]     2
        5        12    6   [3,4]     1

请问有什么办法可以解决这个问题吗?

最佳答案

问题是 Python list is a mutable type, and hence unhashable 。在您要放置 groupby 标准 df.Station 的位置,放置 df.Station.apply(tuple)。这会将列表转换为元组,这些元组是可散列的(并且不可变的)。

例如:

In [66]: df = pd.DataFrame({'Arrival': [8, 5, 4], 'Station': [[1, 2], [3, 4], [1, 2]]})

In [67]: df.groupby([df.Arrival, df.Station.apply(tuple)]).Arrival.sum()
Out[67]: 
Arrival  Station
4        (1, 2)     4
5        (3, 4)     5
8        (1, 2)     8
Name: Arrival, dtype: int64

相反,

df.groupby([df.Arrival, df.Station]).Arrival.sum()

不起作用。

关于python - Pandas groupby 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39622884/

相关文章:

python - 我的菜谱搜索程序(守护进程)的图像缓存循环出错

python - 从 Python 中的单元素字典中提取键名

python - 从列表中删除重复元素,但只删除那些重复元素为奇数的元素

python - 值错误 : max() arg is an empty sequence

Python 日志记录开销

python - 为什么从命令行调用的脚本与从 git 属性调用的脚本的行为不同?

Java - 创建一个包含固定 40 个元素的数组的列表

python - Json/奇怪的列转换

python - 用 pandas 和 numpy 解析冒号分隔的稀疏数据

pandas - 仅回填最后 N 项