例如,我在“位置”列下有多个位置,那么我想在每个位置内添加组号。但是,地点的组数不同。
例如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中的#ofgroups将其0分配给x的组。
答案 0 :(得分:1)
我想自己找到了解决方案。如果将此视为每个组中的添加索引,则非常容易。解决方法如下:
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'])
答案 1 :(得分:0)
您可以查看此代码。
data = [
{ 'name': 'Chicago', 'c': 2 },
{ 'name': 'Minneapolis', 'c': 5 },
{ 'name': 'Dallas', 'c': 1 }
]
result = []
for location in data:
for i in range(0, location['c']):
result.append({ 'name': location['name'], 'group': i+1 })
result
将是:
[{'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'}]