Pandas 通过保留其他列进行分组
这个问题类似于,但在我的例子中,我需要应用一个函数,为每个组返回一个序列而不是一个值-这个问题是关于使用Pandas 通过保留其他列进行分组,pandas,group-by,Pandas,Group By,这个问题类似于,但在我的例子中,我需要应用一个函数,为每个组返回一个序列而不是一个值-这个问题是关于使用sum进行聚合,但我需要使用rank(因此区别类似于agg和transform) 我有一段时间以来公司的数据。这将生成一些类似于我的用例的虚拟数据: import numpy as np import pandas as pd dates = pd.date_range('1926', '2020', freq='M') ndates = len(dates) nfirms = 5000 c
sum
进行聚合,但我需要使用rank
(因此区别类似于agg
和transform
)
我有一段时间以来公司的数据。这将生成一些类似于我的用例的虚拟数据:
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')
)应该可以安全地将代码分配回。是的,rank()
与transform('rank')
非常相似。这是因为rank
返回每组中长度相同的序列。谢谢。“应该是”与“是”?;)是的,应该在这里,和现在一样。