我被困了好几天。
例如,我在下面有一个数据框:
+---------+---------+
| 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/