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