我有一个以下格式的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
如果有任何方法可以解决这个问题,请告诉我吗?
答案 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
现在您的电台数据是免费的,您可以正常分组。