作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含报价数据的数据框,我想将其转换为部分数据。 数量 列说明每个报价有多少部分。如果报价包含三个部分,其中两个已售出,则该行应在新数据框中出现三次,因此 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/
我是一名优秀的程序员,十分优秀!