使用 pandas 数据帧避免 Python 中的显式 for 循环

Avoiding explicit for-loop in Python with pandas dataframe

我想找到一个更好的方法来进行下面的过程。

#import packages
import pandas as pd

我定义了一个 pandas 数据框。

# Create dataframe
data = {'name': ['Jason', 'Jason', 'Tina', 'Tina', 'Tina'],
        'reports': [4, 24, 31, 2, 3],
        'coverage': [25, 94, 57, 62, 70]}
df = pd.DataFrame(data)

创建数据框后,我想向数据框添加一个额外的列。此列包含基于每个名称的覆盖率列中的值的排名。

#Add column with ranks based on 'coverage' for every name separately. 
df_end = pd.DataFrame()
for person_names in df.groupby('name').groups:
    one_name = df.groupby('name').get_group(person_names)
    one_name['coverageRank'] = one_name['coverage'].rank()
    df_end = df_end.append(one_name)

有没有可能用更简单的方法来完成这个简单的任务?也许不使用 for 循环?

我觉得你需要DataFrameGroupBy.rank:

df['coverageRank'] = df.groupby('name')['coverage'].rank()
print (df)
   coverage   name  reports  coverageRank
0        25  Jason        4           1.0
1        94  Jason       24           2.0
2        57   Tina       31           1.0
3        62   Tina        2           2.0
4        70   Tina        3           3.0