Python 大熊猫乐园中的度假村价值观
我正在尝试重新分配或使用Python 大熊猫乐园中的度假村价值观,python,pandas,sorting,dataframe,Python,Pandas,Sorting,Dataframe,我正在尝试重新分配或使用列中的值 对于下面的代码,我希望重新分配[Person]列。具体地说,如果任何人的唯一值少于3个,我希望将它们组合起来。如果人员具有3个唯一值,则保持原样 例如: Person 1, A Person 1, B Person 2, C Person 1, D Person 2, E Person 3, F 使用上述示例,Person 1将被单独放置,因为它们具有3个唯一值,而Person 3将与Person 2分组,因为它们分别具有2和1 以下是我到目前为止的情况: d
列中的值
对于下面的代码,我希望重新分配[Person]
列。具体地说,如果任何人
的唯一值少于3个
,我希望将它们组合起来。如果人员
具有3个唯一值
,则保持原样
例如:
Person 1, A
Person 1, B
Person 2, C
Person 1, D
Person 2, E
Person 3, F
使用上述示例,Person 1
将被单独放置,因为它们具有3个唯一值
,而Person 3
将与Person 2
分组,因为它们分别具有2和1
以下是我到目前为止的情况:
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'],
'Person' : ['Person 1','Person 1','Person 2','Person 1','Person 3','Person 3','Person 1','Person 1'],
})
df = pd.DataFrame(data=d)
n = 3
df['complete'] = df.Person.apply(lambda x: 1 if df.Person.tolist().count(x) == n else 0)
df['num'] = df.Person.str.replace('Person ','')
df.sort_values(by=['num','complete'],ascending=True,inplace=True)
c = 0
person_numbers = []
for x in range(0,999):
if x % n == 0:
c += 1
person_numbers.append(c)
df['Person_new'] = person_numbers[0:len(df)]
df.Person = 'Person ' + df.Person_new.astype(str)
df.drop(['complete','Person_new','num'],axis=1,inplace=True)
df['Time'] = pd.to_timedelta(df['Time'])
df = df.sort_values(by='Time')
输出:
Time Place Area Person
0 08:03:00 House 1 X Person 1
1 08:17:00 House 2 X Person 1
2 08: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 2
7 12:10:00 House 1 X Person 2
这无法识别索引6-7中重复的行
。它们与索引0
相同。因此,Person 1
应该分配到这里。代码无法识别重复的值。如果我删除这些重复的行
代码可以工作,但我的实际数据集包含大量重复的行
可以实现预期的结果:
预期产出:
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
尝试对数据进行分组,然后使用您想要的任何条件对组进行迭代
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'],
'Person' : ['Person 1','Person 1','Person 2','Person 1','Person 3','Person 3','Person 1','Person 1'],
})
df = pd.DataFrame(data=d)
grouper = df.groupby(['Person','Area','Place'])
new_df = pd.DataFrame()
for index, group in grouper:
# do what you want to group here
if len(group.index) >= 2:
# reassign to person 1?
group['Person'] = 'Person 1'
# append to new_df
new_df = new_df.append(group)
你能解释得更清楚一点吗“具体地说,如果任何人的唯一值少于3个,我想把它们组合起来。如果一个人有3个唯一值,就按原样离开。”?@cosmic_inquiry提供了一个例子。这有意义吗?