熊猫队列表

时间:2016-09-21 17:23:15

标签: 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

如果有任何方法可以解决这个问题,请告诉我吗?

2 个答案:

答案 0 :(得分:4)

问题在于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()

无效。

答案 1 :(得分:1)

import pandas as pd
df = pd.DataFrame({'arrival':[8,5,8], 'departure':[10,12,10], \
'park':[5,6,5], 'station':[[1,2], [3,4], [1,2]]})

df['arrival_station'] = df.station.apply(lambda x: x[0])
df['departure_station'] = df.station.apply(lambda x: x[1])
print df

   arrival  departure  park station  arrival_station  departure_station
0        8         10     5  [1, 2]                1                  2
1        5         12     6  [3, 4]                3                  4
2        8         10     5  [1, 2]                1                  2

现在您的电台数据是免费的,您可以正常分组。