获取 Panda 时间序列中所有组中出现频率最高的元素

Get most frequent elements across all groups in a Panda time series

对于给定的多组时间序列,如何绘制所有组 中 n 最频繁元素 count?请注意,这不同于 each 组的 n 最常见元素,后者可以通过 countnlargest.

来完成

给定一个数据框:

import pandas as pd

data = {'year': [2020, 2020, 2021, 2021, 2022], 
        'month': [1, 1, 2, 2, 3],
        'Name': ['name_1', 'name_2', 'name_1', 'name_2', 'name_1'], 
        'count': [10, 12, 8, 10, 2]}  

df = pd.DataFrame(data)

print(df)

输出

   year  month    Name  Count
0  2020      1  name_1     10
1  2020      1  name_2     12
2  2021      2  name_1      8
3  2021      2  name_2     10
4  2022      3  name_1      2

  • 数据应按 year month
  • 分组
  • 我想要n = 1,换句话说经常

我只想绘制 name_1count,因为尽管它在任何组(甚至整体)中都不是最多的,但它“出现”的次数更多。

IIUC,您想过滤最常见的名称并绘制计数吗?

# get top Name
top = df['Name'].value_counts().index[0]

# filter
df2 = df[df['Name'].eq(top)]

# plot
(df2.assign(date=df2[['year', 'month']].astype(str).apply('_'.join, axis=1))
    .plot.bar(x='date', y='count')
)

几个TOP值
# get top Name
top = df['Name'].value_counts().index[:2]

# filter and reshape
df2 = (df[df['Name'].isin(top)]
        .pivot(index=['year', 'month'],
               columns='Name',
               values='count')
      )

# plot
df2.plot.bar()