熊猫GROUPBY在列表
问题描述:
我有以下格式的熊猫数据帧:熊猫GROUPBY在列表
Arrival Departure Park Station Count
8 10 5 [1,2] 1
5 12 6 [3,4] 1
8 10 5 [1,2] 1
我想GROUPBY的到达,离开,公园,车站这个数据帧,但由于站是一个列表,我得到一个错误。输出应该看起来像:
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()
将无法正常工作。
答
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
现在你的车站数据是免费的,你可以像往常一样groupby。
你想要的输出是什么? –
我想通过根据到达,出发,公园和车站对行进行分组来获得数据帧。 – user36729