【问题标题】:How do i keep the number of rows based on the quantity of other column?如何根据其他列的数量保留行数?
【发布时间】:2018-12-22 10:10:54
【问题描述】:

这几天我一直在想这个问题。

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

+---------+---------+
| 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 不断变化。

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

【问题讨论】:

    标签: python python-3.x python-2.7 pandas pandas-groupby


    【解决方案1】:

    使用GroupBy.apply 并通过iat 为每个组选择ColumnB 的第一个值:

    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
    

    【讨论】:

      猜你喜欢
      • 2018-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-26
      • 1970-01-01
      • 2014-06-17
      相关资源
      最近更新 更多