熊猫分组保持其他列

时间:2020-09-01 18:13:13

标签: pandas group-by

这个问题类似于this one,但是对于我来说,我需要为每个组应用一个返回Series而不是单个值的函数-这个问题与sum进行聚合,但是我需要使用rank(所以区别就像aggtransform之间)。

我有一段时间的公司数据。这将生成一些类似于我的用例的伪数据:

import numpy as np
import pandas as pd

dates = pd.date_range('1926', '2020', freq='M')
ndates = len(dates)
nfirms = 5000
cols = list('ABCDE')
df = pd.DataFrame(np.random.randn(nfirms*ndates,len(cols)),
                  index=np.tile(dates,nfirms),
                  columns=cols)

df.insert(0, 'id', np.repeat(np.arange(nfirms), ndates))

我需要计算每个日期(索引)中列E的排名,但要保留列id

如果我仅使用groupby和.rank,我会得到:

df.groupby(level=0)['E'].rank()

1926-01-31    3226.0
1926-02-28    1042.0
1926-03-31    1611.0
1926-04-30    2591.0
1926-05-31      30.0
               ...  
2019-08-31    1973.0
2019-09-30     227.0
2019-10-31    4381.0
2019-11-30    1654.0
2019-12-31    1572.0
Name: E, Length: 5640000, dtype: float64

此维度与df相同,但是我不确定在索引上合并是安全的-我确实也需要在id列上进行合并。我可以假设顺序保持不变吗?

如果输出中的顺序与输出中的顺序相同,我想我可以这样做:

df['ranks'] = df.groupby(level=0)['E'].rank()

但是,这似乎有些奇怪,我认为可以在groupby输出中包括其他列。

(我也不知道调用.rank()是否等效于.transform('rank')。)

0 个答案:

没有答案