我被困了好几天。

例如,我在下面有一个数据框:

+---------+---------+
| ColumnA | ColumnB |
+---------+---------+
| PartA   |       4 |
| PartA   |       4 |
| PartA   |       4 |
| PartA   |       4 |
| PartA   |       4 |
| PartA   |       4 |
| PartB   |       3 |
| PartB   |       3 |
| PartB   |       3 |
| PartB   |       3 |
| PartC   |       2 |
| PartC   |       2 |
| PartC   |       2 |
| PartC   |       2 |
+---------+---------+


我如何将上面的数据框变成这样:

+---------+---------+
| ColumnA | ColumnB |
+---------+---------+
| PartA   |       4 |
| PartA   |       4 |
| PartA   |       4 |
| PartA   |       4 |
| PartB   |       3 |
| PartB   |       3 |
| PartB   |       3 |
| PartC   |       2 |
| PartC   |       2 |
+---------+---------+


如您所见,我想根据ColumnB上的行数保持行数

我找到的最接近的解决方案是使用df.groupby('ColumnA').tail(3)
但是我希望基于ColumnB尾部的值不断变化。

任何帮助将不胜感激!!!谢谢!

最佳答案

使用GroupBy.apply,并按ColumnB为每个组选择第一个值iat

df = df.groupby('ColumnA').apply(lambda x: x.tail(x.ColumnB.iat[0])).reset_index(drop=True)
print (df)
  ColumnA  ColumnB
0   PartA        4
1   PartA        4
2   PartA        4
3   PartA        4
4   PartB        3
5   PartB        3
6   PartB        3
7   PartC        2
8   PartC        2

关于python - 如何根据其他列的数量保持行数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51335107/

10-16 11:37