【发布时间】:2021-05-11 13:21:14
【问题描述】:
我有一个数据框:
df=
year_month data
(1970,1) 12
(1970,1) 15
(1970,1) 3
(1970,2) 32
(1970,2) 28
我想对每个 year_month 的数据进行排名,然后将每个排名除以每组中的数据数加 1,结果是:
result=
year_month data
(1970,1) 0.5
(1970,1) 0.75
(1970,1) 0.25
(1970,2) 0.67
(1970,2) 0.33
解释:例如第2行:year_month为(1970,1),数据为15。在(1970,1)内,数据15排在第3位除以4(( 1970,1) +1),结果为 0.75。
我目前的方法是使用 for 循环
df_ = []
for ym in yy_mm:
df1 = df.loc(df.yy_mm == ym)
n = df1.shape[0]
df1 = df1.rank()/n
df_.append(df1)
df_result = pd.concat(df)
这可行,但我正在寻找任何其他更有效的方式。使用循环很慢,特别是它是一个更大的数据。提前致谢。
【问题讨论】:
标签: pandas performance dataframe loops