gpt4 book ai didi

python - 如何根据Python中列的值重复行

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

我有以下 df,其中包含代码/产品和周列。

code.  Product  .   weeks
123 . product1 . 1;2
123 . product1 . 3
321 . product2 . 4;5;6
321 . product2 . 7

对于那些超过 1 周的行(例如 1;2 或 4;5;6),我想重复这些行。我想要的输出如下:

code.  Product  .   weeks
123 . product1 . 1
123 . product1 . 2
123 . product1 . 3
321 . product2 . 4
321 . product2 . 5
321 . product2 . 6
321 . product2 . 7

使用 pandas 或 numpy 的最佳方法是什么?

最佳答案

用途:

df = (df.set_index(['code','Product'])['weeks']
.str.split(';', expand=True)
.stack()
.reset_index(level=2, drop=True)
.reset_index(name='weeks'))
print (df)
code Product weeks
0 123 product1 1
1 123 product1 2
2 123 product1 3
3 321 product2 4
4 321 product2 5
5 321 product2 6
6 321 product2 7

说明:

  1. 第一set_index按所有重复列
  2. 通过split创建DataFrame
  3. reshape stack
  4. 上次数据清理由 reset_index

另一个解决方案:

from itertools import chain

weeks = df['weeks'].str.split(';')
lens = weeks.str.len()
df = pd.DataFrame({
'code' : df['code'].repeat(lens),
'Product' : df['Product'].repeat(lens),
'weeks' : list(chain.from_iterable(weeks.values.tolist())),
})

print (df)
code Product weeks
0 123 product1 1
0 123 product1 2
1 123 product1 3
2 321 product2 4
2 321 product2 5
2 321 product2 6
3 321 product2 7

说明:

  1. 通过 split 创建列表
  2. 通过 len 获取 lsits 的长度
  3. 最后repeat列并展平

关于python - 如何根据Python中列的值重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51473501/

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