我有一个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
答案 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