Python 如何向每个类别添加多个级别

Python 如何向每个类别添加多个级别,python,pandas,Python,Pandas,例如,我在“位置”列下有多个位置,然后我想在每个位置内添加组号。但不同地点的团体数量不同 e、 g.df1 Location Chicago Minneapolis Dallas . . . 和df2 Location times Chicago 2 Minneapolis 5 Dallas 1 . . . . . . 我想得到的是: Location

例如,我在“位置”列下有多个位置,然后我想在每个位置内添加组号。但不同地点的团体数量不同

e、 g.df1

Location
Chicago
Minneapolis
Dallas
.
.
.
和df2

Location      times
Chicago         2
Minneapolis     5
Dallas          1
.               .
.               .
.               .
我想得到的是:

Location   Group
Chicago      1
Chicago      2
Minneapolis  1
Minneapolis  2
Minneapolis  3
Minneapolis  4
Minneapolis  5
Dallas       1
.
.
.
我现在拥有的是。。。在位置之间重复相同数量的组:每个位置内有17个组。但我刚刚意识到在不同的地点会有不同的群体。。。那我就不知道下一步该怎么办了

filled_results['location'] = results['location'].unique()
filled_results['times'] = 17
filled_results = filled_results.loc[filled_results.index.repeat(filled_results.times)]

v = pd.Series(range(1, 18))
filled_results['group'] = np.tile(v, len(filled_results) // len(v) + 1)[:len(filled_results)]  

filled_results = filled_results.drop(columns=['times'])

我在考虑一个for循环,但不知道如何实现。对于df1中的每个唯一位置,根据df2中的组的#为它们提供0到x的组

您可以查看此代码

数据=[
{'name':'Chicago','c':2},
{'name':'Minneapolis','c':5},
{'name':'Dallas','c':1}
]
结果=[]
对于数据中的位置:
对于范围(0,位置['c'])中的i:
追加({'name':位置['name'],'group':i+1})
结果将是:

[{'group': 1, 'name': 'Chicago'}, {'group': 2, 'name': 'Chicago'}, {'group': 1, 'name': 'Minneapolis'}, {'group': 2, 'name': 'Minneapolis'}, {'group': 3, 'name': 'Minneapolis'}, {'group': 4, 'name': 'Minneapolis'}, {'group': 5, 'name': 'Minneapolis'}, {'group': 1, 'name': 'Dallas'}]

我想我自己找到了解决办法。如果将其视为每个组内的添加索引,则非常容易。以下是解决方案:

df = pd.DataFrame()
df['location'] = df1['location'].unique()
df = pd.merge(df,
              df2,
              on = 'location',
              how = 'left' )
df = df.loc[df.index.repeat(df.times)]

df["Group"] = df.groupby("location")["times"].rank(method="first", ascending=True)

df["Group"] = df["Group"].astype(int)
df = df.drop(columns=['times'])

你好谢谢你的快速回答!但如果我的数据和结果都是数据帧呢?我试图使用数据作为数据帧来应用相同的for循环,但它一直给我一个错误对于范围(0,位置['c'])中的i:```类型错误:字符串索引必须是整数,如果您能提供帮助,我将不胜感激@StephanieG对不起,我不知道数据帧。