我有一个潘达斯的数据,其中包含大气河流(AR)的登陆清单。每个AR都有一个相关的日期(初始登陆日期),增加6个小时的时间段。此列表还包括一个列,该列说明AR在一个~40年期间的数量。大多数ARs的持续时间超过6个小时,因此在这段时间内AR的数量是相同的。在我的例子中,我想订购ARs的持续时间,同时保持AR登陆的第一个日期。
number of AR Year Month Day Hour
1651 1979 1 5 18
1651 1979 1 6 0
1651 1979 1 6 06
1651 1979 1 6 12
1651 1979 1 6 18
1652 1979 1 8 06
1652 1979 1 8 12
1652 1979 1 8 18理想情况下,我应该有一个新的dataframe,它看起来像这样:
number of AR Frequency Year Month Day Hour
1651 5 1979 1 5 18
1652 3 1979 1 8 6发布于 2018-09-12 16:26:14
您可以使用groupby获取每个AR中的第一个,然后使用带有值计数的join。这意味着您的数据按Year排序,然后按Month排序,然后按Day排序(在sort_values下面完成):
new_df = df.sort_values(['Year','Month', 'Day']).groupby(['number of AR']).first()
new_df = new_df.join(df['number of AR'].value_counts().to_frame('frequency'))
>>> new_df
Year Month Day Hour frequency
number of AR
1651 1979 1 5 18 5
1652 1979 1 8 6 3发布于 2018-09-12 16:26:12
听起来你只是想第一次出现每一个唯一的“数量AR”与长度相关联。
df.groupby('number of AR').first().merge(
df.groupby('number of AR').apply(len).rename("Frequency").to_frame(),
left_on='number of AR', right_index=True)
# Year Month Day Hour Frequency
#number of AR
#1651 1979 1 5 18 5
#1652 1979 1 8 6 3如果您实际上不想要第一个,那么在调用.first()之前,您应该首先按照您所关心的值进行排序。
https://stackoverflow.com/questions/52299554
复制相似问题