我有一个script是分配价值为基础的假两件columns的pandas df。下面的代码能够实现第一步,但我正在为第二步而苦苦挣扎。
所以脚本最初应该:
1)分配Person为每个单独的string在[Area]与所述第一3 unique values中[Place]
2)寻找重新分配People小于3 unique values 示例。在df下面有6 unique values中[Area]和[Place]。但是3 People被分配了。理想情况下,2人们将2 unique values每个
d = ({
'Time' : ['8:03:00','8:17:00','8:20:00','10:15:00','10:15:00','11:48:00','12:00:00','12:10:00'],
'Place' : ['House 1','House 2','House 1','House 3','House 4','House 5','House 1','House 1'],
'Area' : ['X','X','Y','X','X','X','X','X'],
})
df = pd.DataFrame(data=d)
def g(gps):
s = gps['Place'].unique()
d = dict(zip(s, np.arange(len(s)) // 3 + 1))
gps['Person'] = gps['Place'].map(d)
return gps
df = df.groupby('Area', sort=False).apply(g)
s = df['Person'].astype(str) + df['Area']
df['Person'] = pd.Series(pd.factorize(s)[0] + 1).map(str).radd('Person ')
输出:
Time Place Area Person
0 8:03:00 House 1 X Person 1
1 8:17:00 House 2 X Person 1
2 8:20:00 House 1 Y Person 2
3 10:15:00 House 3 X Person 1
4 10:15:00 House 4 X Person 3
5 11:48:00 House 5 X Person 3
6 12:00:00 House 1 X Person 1
7 12:10:00 House 1 X Person 1
如您所见,第一步工作正常。或者每个人stringin [Area],第一个3 unique valuesin[Place]都分配给一个Person。这使得Person 1有3 values,Person 2与1 value和Person 3带2 values。
第二步是我挣扎的地方。
如果 aPerson少于3 unique values分配给他们,请更改此设置,以便每个Person人最多3 unique values
预期输出:
Time Place Area Person
0 8:03:00 House 1 X Person 1
1 8:17:00 House 2 X Person 1
2 8:20:00 House 1 Y Person 2
3 10:15:00 House 3 X Person 1
4 10:15:00 House 4 X Person 2
5 11:48:00 House 5 X Person 2
6 12:00:00 House 1 X Person 1
7 12:10:00 House 1 X Person 1
慕田峪4524236
慕无忌1623718
相关分类