如果我有这样的熊猫数据框:
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列中的值重复但不能连续,也可以。
答案 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