【发布时间】:2023-03-28 08:05:01
【问题描述】:
我有一个数据框:
# create example df
df = pd.DataFrame(index=[1,2,3,4,5,6,7,8])
df['ID'] = [1,1,1,1,2,2,2,2]
df['election_date'] = pd.date_range("01/01/2010", periods=8, freq="M")
df['status'] = ['b','a','b','c','a','d','d','b']
# sort values
df.sort_values(['election_date'], inplace=True, ascending=False)
df.reset_index(drop=True, inplace=True)
df
ID election_date status
0 2 2010-08-31 b
1 2 2010-07-31 d
2 2 2010-06-30 d
3 2 2010-05-31 a
4 1 2010-04-30 c
5 1 2010-03-31 b
6 1 2010-02-28 a
7 1 2010-01-31 b
我想为每个ID 获取列status 的累积 最频繁状态。这是我所期望的:
ID election_date status cum_most_freq_status
0 2 2010-08-31 b d
1 2 2010-07-31 d d
2 2 2010-06-30 d a
3 2 2010-05-31 a NaN
4 1 2010-04-30 c b
5 1 2010-03-31 b a
6 1 2010-02-28 a b
7 1 2010-01-31 b NaN
解读:
- 对于
2010-01-31,值为NaN,因为过去没有status值。2010-05-31也是如此。 - 对于
2010-03-31,过去最常见的状态是a 和b。因此,我们采用最新的值,即a。
你会怎么做?
【问题讨论】:
标签: pandas dataframe numpy count cumulative-sum