Панды, продублируйте строку в зависимости от условия - PullRequest
2 голосов
/ 09 октября 2019

У меня есть такой фрейм данных -

enter image description here

Что я хочу сделать, так это то, что всякий раз, когда в Col3 есть 'X', эта строка должнаполучить дубликат и «X» должен быть изменен на «Z». Результат должен выглядеть так -

enter image description here

Я пробовал несколько подходов, но ничего не получалось! Может кто-нибудь, пожалуйста, руководство о том, как это сделать.

1 Ответ

2 голосов
/ 09 октября 2019

Вы можете сначала отфильтровать по boolean indexing и установить Z в Col3 по DataFrame.assign, объединить с оригиналом с помощью concat, сортировка индекса по DataFrame.sort_index с устойчивым алгоритмом mergesort и последним созданным по умолчанию RangeIndex по DataFrame.reset_index с drop=True:

df = pd.DataFrame({
         'B':[4,5,4,5,5,4],
         'C':[7,8,9,4,2,3],
        'Col3':list('aXcdXf'),
         'D':[1,3,5,7,1,0],
         'E':[5,3,6,9,2,4],
         'F':list('aaabbb')
})


df = (pd.concat([df, df[df['Col3'].eq('X')].assign(Col3 = 'Z')])
        .sort_index(kind='mergesort')
        .reset_index(drop=True))
print (df)
   B  C Col3  D  E  F
0  4  7    a  1  5  a
1  5  8    X  3  3  a
2  5  8    Z  3  3  a
3  4  9    c  5  6  a
4  5  4    d  7  9  b
5  5  2    X  1  2  b
6  5  2    Z  1  2  b
7  4  3    f  0  4  b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...