熊猫加入分组数据框

时间:2020-03-25 16:03:39

标签: pandas pandas-groupby

我有一个Pandas数据框,可以告诉我某艘船在特定日期航行了多少行程:

   trip  ship       Date
0     1     1 2020-03-09
1     2     1 2020-03-09
2     3     1 2020-03-09
3     4     1 2020-03-09
4     5     2 2020-03-13
5     6     2 2020-03-13
6     7     2 2020-03-13
7     8     3 2020-03-22
8     9     3 2020-03-22

L= ['year', 'month','day']
df = pd.DataFrame({'year': [2020, 2020,2020,2020,2020,2020, 2020,2020,2020],
                   'month': [3, 3,3,3,3, 3, 3, 3,3 ],
                   'day': [9, 9,9,9,13,13,13,22,22],
                   'trip': [1,2,3,4,5,6,7,8,9],
                   'ship':[1,1,1,1,2,2,2,3,3]})
df['Date'] = pd.to_datetime(df[L],format='%Y%m%d')
df.drop(L,axis=1,inplace=True)

然后,我将每个“船”组中的旅行次数计算为:

df2 = df.groupby(['ship'])['trip'].count().reset_index() #counte the number  of trips within each group ship.

如何从旧的数据框df1中将“船”组中的日期分配给新的df2?

所需结果如下:

   ship  trip Date 
0     1     4 2020-03-09
1     2     3 2020-03-13
2     3     2 2020-03-22

2 个答案:

答案 0 :(得分:1)

在我看来,每艘船似乎只有一个Date价值。在这种情况下,您可以将Date列添加到.groupby()方法中,如下所示:

>>> df2 = df.groupby(['ship', 'Date'])['trip'].count().reset_index()
>>> print(df2)
   ship       Date  trip
0     1 2020-03-09     4
1     2 2020-03-13     3
2     3 2020-03-22     2

答案 1 :(得分:1)

如果船只在不同的日期出发并且您希望每天旅行,则可以按ship,date分组。

df2 = df.groupby(['ship','Date']).agg({'trip':'count'})

ship    Date    trip
1   2020-03-09  4
2   2020-03-13  3
3   2020-03-22  2

如果您希望旅行从第一个销售日算起

df.groupby(['ship']).agg(FirstDate = ('Date','first'),trips = ('trip','count'))

ship FirstDate  trips       
1   2020-03-09  4
2   2020-03-13  3
3   2020-03-22  2