我有一个Pandas数据框,其中包含大气河流(AR)登陆清单。每个AR都有一个关联的日期(首次登陆的日期),以6小时为周期递增。此列表还包括一列,该列告诉您在整个40年的时间内AR的数量。大多数AR的持续时间超过一个6小时时间段,因此在该时间段内具有相同数量的AR。就我而言,我想按AR的持续时间排序,同时保持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
理想情况下,我会有一个新的数据框,看起来像这样:
number of AR Frequency Year Month Day Hour
1651 5 1979 1 5 18
1652 3 1979 1 8 6
答案 0 :(得分:1)
像您这样的声音,只是希望每个唯一的“ 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()
之前按您关心的值进行排序。
答案 1 :(得分:1)
您可以使用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