Я пытаюсь переназначить или преобразовать значения в pandas df
column
.
Для кода ниже я хочу переназначить столбец [Person]
.В частности, если у любого Person
меньше 3 unique values
, я хочу объединить их.Если Person
имеет 3 unique values
, тогда оставьте как есть.
Пример:
Person 1, A
Person 1, B
Person 2, C
Person 1, D
Person 2, E
Person 3, F
Используя приведенный выше пример, Person 1
останется один, так как они имеют 3 unique values
,в то время как 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
Это не распознает duplicate
rows
в Index 6-7
.Они такие же как Index 0
.Итак, Person 1
должно быть назначено здесь.Код не распознается duplicate
values
.Если я удаляю эти duplicated
rows
, код работает, но мой фактический набор данных содержит множество duplicates
, которое может быть достигнуто, а ожидаемый результат будет:
Предполагаемый результат:
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