Как удалить дубликат из строк и преобразовать его значение в столбец в pandas - PullRequest
2 голосов
/ 15 апреля 2020

У меня есть много данных в следующем формате.

Person_ID           Person_value
1                    usr:value1
1                    val:value2
2                    usr:value1
2                    val:value2
3                    usr:value1
3                    val:value2
4                    usr:value1
4                    val:value2

Но я хочу получить результат, подобный этому:

Person_ID           Person_value            Person_value2
1                    Usr:value1              val:value2
2                    Usr:value1              val:value2
3                    Usr:value1              val:value2
4                    Usr:value1              val:value2

ИЛИ Вот так ::

Person_ID                  Person_value
1                    Usr:value1 // val:value2
2                    Usr:value1 // val:value2
3                    Usr:value1 // val:value2
4                    Usr:value1 // val:value2

Из-за этих значений это вызывает дублирование значений. и сохранение обоих значений очень важно.

1 Ответ

3 голосов
/ 15 апреля 2020

IIU C использование GroupBy.cumcount для вспомогательной колонки с pivot:

df1 = (df.assign(a=df.groupby('Person_ID').cumcount().add(1))
         .pivot('Person_ID','a','Person_value')
         .add_prefix('Person_value'))
print (df1)
a           Person_value1 Person_value2
Person_ID                            
A              usr:value1    val:value2
B              usr:value1    val:value2
C              usr:value1    val:value2
D              usr:value1    val:value2

или совокупность join:

df1 = (df.groupby('Person_ID')
         .agg(' // '.join)
         .reset_index())
print (df1)
  Person_ID              Person_value
0           A  usr:value1 // val:value2
1           B  usr:value1 // val:value2
2           C  usr:value1 // val:value2
3           D  usr:value1 // val:value2

Если необходимо, разделите строки на Person_value до : до pivot:

df1 = (df.assign(a=df['Person_value'].str.split(':').str[0])
         .pivot('Person_ID','a','Person_value'))
print (df1)
a                   usr         val
Person_name                        
A            usr:value1  val:value2
B            usr:value1  val:value2
C            usr:value1  val:value2
D            usr:value1  val:value2
...