如果另一列中的值重复,如何获取熊猫数据框中的最小列值?

时间:2019-10-09 16:18:07

标签: python 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列中的最小值。这样我就得到了这样的pandas数据框:

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

如果B列中的值重复但不能连续,也可以。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

所有其他答案似乎都忽略了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

答案 2 :(得分:0)

您还可以使用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