【发布时间】:2018-09-16 17:07:32
【问题描述】:
我有一个看起来像这样的 pandas 数据框:
+----+-------+-----+
| | name | max |
+----+-------+-----+
| 0 | a | 1 |
| 1 | b | 2 |
| 2 | c | 2 |
| 3 | d | 4 |
| 4 | e | 1 |
+----+-------+-----+
name 列表示项目名称,max 列表示该名称所属的最大组数。通过提供此数据的方式,一个项目不仅属于该最大组,而且还属于小于该数量的每个组。
我想“分解”这个数据框以为每个名称创建额外的记录,并在新列中将最大值倒计时到值 1。
最终,我希望我的新数据框如下所示:
+----+-------+------+--------+
| | name | max | number |
+----+-------+------+--------+
| 0 | a | 1 | 1 |
| 1 | b | 2 | 2 |
| 2 | b | 2 | 1 |
| 3 | c | 2 | 2 |
| 4 | c | 2 | 1 |
| 5 | d | 4 | 4 |
| 6 | d | 4 | 3 |
| 7 | d | 4 | 2 |
| 8 | d | 4 | 1 |
| 9 | e | 1 | 1 |
+----+-------+------+--------+
我正在考虑使用函数df.ffill(),但它只填写NaN,我需要先创建NaN 行。我也在考虑使用df.groupby(),但我也不确定这是否是正确的方向。
我可以想办法用嵌套for-loop 之类的东西来做到这一点,但我宁愿不遍历数据框。
【问题讨论】:
-
您以后会不会担心另一个同名的组?你能有一个 b c d e b 吗?
-
没有这种情况。其实
name其实就是索引,不过在这一步之前我用的是reset_index()。