Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫群居名单_Python_List_Pandas_Dataframe - Fatal编程技术网

Python 熊猫群居名单

Python 熊猫群居名单,python,list,pandas,dataframe,Python,List,Pandas,Dataframe,我有一个熊猫数据框,格式如下: 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 Sta

我有一个熊猫数据框,格式如下:

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
你能告诉我是否有办法解决这个问题吗

问题是,一个。将
groupby
criteria
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

现在您的站点数据是免费的,您可以像往常一样进行分组

您想要的输出是什么?我想通过根据到达、离开、停车和车站对行进行分组来获得一个数据帧。它可以工作,但它给了我一个系列。如何将其制作成数据帧?@user36729每当您有一个系列
s
,并且希望将其制作成数据帧时,您可以使用
s.to_frame()
。谢谢。这样,“到达”和“站点”在数据帧的索引中就粘在一起了。@user36729很乐意回答,但这些问题与您原来的问题关系不大,而与一般的
groupby
相关。在评论中进行对话有点困难。但是,在
.to_frame()
之后,可以调用
.reset_index()
。如果它抱怨现有列,请在
之间使用.rename(columns={'Arrival':'count})
(或您拥有的任何列)。