Как добавить агрегированные строки на основе других строк в кадре данных Pandas - PullRequest
1 голос
/ 15 мая 2019

У меня есть датафрейм, похожий на этот:

index a b c d
    0 1 1 1 3
    1 1 1 2 1
    2 1 2 1 4
    3 1 2 2 1
    4 2 2 1 5
    5 2 2 2 9
    6 2 2 1 2
    7 2 3 2 6

Я хочу добавить новые строки, где c равно 0, а d заменяется максимальным значением d существующих строк, где a и b одинаковы:

index a b c d
    8 1 1 0 3
    9 1 2 0 4
   10 2 2 0 9
   11 2 3 0 6

Какую команду я могу использовать? Спасибо!

Ответы [ 2 ]

3 голосов
/ 15 мая 2019

Кажется, вы можете использовать sort_values цепочку с drop_duplicates, затем append

df.append(df.sort_values('d').drop_duplicates(['a','b'],keep='last').assign(c=0))
Out[77]: 
       a  b  c  d
index            
0      1  1  1  3
1      1  1  2  1
2      1  2  1  4
3      1  2  2  1
4      2  2  1  5
5      2  2  2  9
6      2  2  1  2
7      2  3  2  6
0      1  1  0  3
2      1  2  0  4
7      2  3  0  6
5      2  2  0  9
2 голосов
/ 15 мая 2019

Я придумаю решение, используя groupby и pd.concat следующим образом:

pd.concat([df, df.groupby(['a', 'b'])['d'].max().reset_index().assign(c=0)], ignore_index=True)


Out[1668]:
    a  b  c  d
0   1  1  1  3
1   1  1  2  1
2   1  2  1  4
3   1  2  2  1
4   2  2  1  5
5   2  2  2  9
6   2  2  1  2
7   2  3  2  6
8   1  1  0  3
9   1  2  0  4
10  2  2  0  9
11  2  3  0  6    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...