gpt4 book ai didi

python Pandas : Transforming dataframe according to a specific column

转载 作者:行者123 更新时间:2023-12-05 03:23:45 25 4
gpt4 key购买 nike

我有一个包含报价数据的数据框,我想将其转换为部分数据。 数量 列说明每个报价有多少部分。如果报价包含三个部分,其中两个已售出,则该行应在新数据框中出现三次,因此 sold 列在两行上的值为 1,在一行上的值为 0。

实际数据框包含更多列,这些列应在转换后的数据框中保持完整。 Date 列作为示例。

我的输入:

    Offer name     Quantity   Sold   Date
0 A 3 2 2022-05
1 B 2 1 2022-01
2 C 1 1 2022-04
3 D 1 1 2022-04
4 E 1 1 2022-05

期望的输出:

    Offer name     Quantity   Sold   Date
0 A 1 1 2022-05
1 A 1 1 2022-05
2 A 1 0 2022-05
3 B 1 1 2022-01
4 B 1 0 2022-01
and so on...

谢谢!!

最佳答案

解决方案

s = df.reindex(df.index.repeat(df['Quantity']))
s['Quantity'] = 1
s['Sold'] = s.groupby(level=0).cumcount().lt(s['Sold']).astype(int)

解释

精确重复数据帧的索引数量

>>> s = df.reindex(df.index.repeat(df['Quantity']))
>>> s

Offer name Quantity Sold Date
0 A 3 2 2022-05
0 A 3 2 2022-05
0 A 3 2 2022-05
1 B 2 1 2022-01
1 B 2 1 2022-01
2 C 1 1 2022-04
3 D 1 1 2022-04
4 E 1 1 2022-05

将上述数据帧分组到索引上并使用cumcount创建一个顺序计数器,

>>> s.groupby(level=0).cumcount()
0 0
0 1
0 2
1 0
1 1
2 0
3 0
4 0
dtype: int64

标记顺序计数器小于 Sold 数量的行,然后将 dtype 更改为 int 并将结果分配给 Sold

>>> s['Sold'] = s.groupby(level=0).cumcount().lt(s['Sold']).astype(int)
>>> s

Offer name Quantity Sold Date
0 A 1 1 2022-05
0 A 1 1 2022-05
0 A 1 0 2022-05
1 B 1 1 2022-01
1 B 1 0 2022-01
2 C 1 1 2022-04
3 D 1 1 2022-04
4 E 1 1 2022-05

关于 python Pandas : Transforming dataframe according to a specific column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72437902/

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