gpt4 book ai didi

python - 创建额外的记录并用 pandas 向前填充

转载 作者:行者123 更新时间:2023-12-01 01:36:37 24 4
gpt4 key购买 nike

我有一个 pandas 数据框,如下所示:

+----+-------+-----+
| | name | max |
+----+-------+-----+
| 0 | a | 1 |
| 1 | b | 2 |
| 2 | c | 2 |
| 3 | d | 4 |
| 4 | e | 1 |
+----+-------+-----+

专栏name表示项目名称,而列 max表示 name 所属的最大组号。通过提供此数据的方式,一个项目不仅属于该最大组,而且还属于小于该数字的每个组。

我想“分解”这个数据框,为每个名字创建额外的记录,并将最大值倒数到值 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 ,但我不想迭代数据框。

最佳答案

我的变体是:

df2 = df.reindex(df.index.repeat(df["max"])).reset_index(drop=True)
df2["number"] = df2.groupby("name").cumcount(ascending=False) + 1

这给出了

In [137]: df2
Out[137]:
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

它确实假设原始索引是唯一的,以使重复操作简洁。如果需要,我们可以替换为

df2 = df.iloc[np.repeat(range(len(df)), df["max"])].reset_index(drop=True)

或者其他什么。

关于python - 创建额外的记录并用 pandas 向前填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52345206/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com