Как взять минимальное значение столбца во фрейме данных pandas, если значения в другом столбце повторяются? - PullRequest
1 голос
/ 09 октября 2019

Если у меня есть кадр данных pandas, подобный следующему:

 Col A     Col B     Col C
   1         4         3
   1         4         5
   2         3         7
   2         4         6
   1         6         6
   1         6         4

Когда значения в столбце B повторяются (являются последовательными), я хочу сохранить строку с минимальным значением в столбце C. Таким образом, я получаюфрейм данных панд, например, такой:

 Col A     Col B     Col C
   1         4         3
   2         3         7
   2         4         6
   1         6         4

Это нормально, если значения в столбце B повторяются, они просто не могут быть последовательными.

Ответы [ 3 ]

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

IIUC sort_values + drop_duplicates

Yourdf=df.sort_values(['ColC']).drop_duplicates(['ColA','ColB']).sort_index()
   ColA  ColB  ColC
0     1     4     3
2     2     3     7
3     2     4     6
5     1     6     4
0 голосов
/ 09 октября 2019

Вы также можете использовать DataFrame.sort_values ​​ + GroupBy.first :

g=df['Col_B'].ne(df['Col_B'].shift()).cumsum()
new_df=df.sort_values('Col_C').groupby(g).first().reset_index(drop=True)
print(new_df)

   Col_A  Col_B  Col_C
0      1      4      3
1      2      3      7
2      2      4      6
3      1      6      4
0 голосов
/ 09 октября 2019

Все остальные ответы, кажется, пропускают значения в столбце B, повторяются (являются последовательными) , поэтому вот мой подход:

B_blocks = df['Col B'].ne(df['Col B'].shift()).cumsum()
min_idx = df.groupby(B_blocks)['Col C'].idxmin()

df.loc[min_idx]

Вывод:

   Col A  Col B  Col C
0      1      4      3
2      2      3      7
3      2      4      6
5      1      6      4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...