gpt4 book ai didi

python 将数据框列拆分为多行

转载 作者:太空狗 更新时间:2023-10-30 02:57:25 25 4
gpt4 key购买 nike

我有一个这样的数据框:

--------------------------------------------------------------------
Product ProductType SKU Size
--------------------------------------------------------------------
T-shirt Top [111,222,333,444] ['XS','S','M','L']
Pant(Flared) Bottoms [555,666] ['M','L']
Sweater Top None None

我想要下面的输出:

Product       ProductType        SKU        Size
T-shirt Top 111 XS
T-shirt Top 222 S
T-shirt Top 333 M
T-shirt Top 444 L
Pant(Flared) Bottoms 555 M
Pant(Flared) Bottoms 666 L
Sweater Top None None

我尝试了以下代码:

s = df['SKU'].apply(Series,1).stack()
s.index = s.index.droplevel(-1)
s.name = 'SKU'
del df['SKU']
df = df.join(s)

r = df['Size'].apply(Series,1).stack()
r.index = r.index.droplevel(-1)
r.name = 'Size'
del df['Size']
df = df.join(r)

但这会分解成以下内容:

Product       ProductType   SKU             Size
T-shirt Top 111 XS
T-shirt Top 111 S
T-shirt Top 111 M
T-shirt Top 111 L
T-shirt Top 222 XS
T-shirt Top 222 S
T-shirt Top 222 M
T-shirt Top 222 L
T-shirt Top 333 XS
T-shirt Top 333 S
T-shirt Top 333 M
T-shirt Top 333 L
T-shirt Top 444 XS
T-shirt Top 444 S
T-shirt Top 444 M
T-shirt Top 444 L
Pant(Flared) Bottoms 555 M
Pant(Flared) Bottoms 555 L
Pant(Flared) Bottoms 666 M
Pant(Flared) Bottoms 666 L

请注意,为简单起见,我添加了两个将重复的列(Product、ProductType),但我有 5 个包含字符串的此类列。我基本上想将 SKU 与每种产品的尺寸相关联。

有人可以帮忙吗?

最佳答案

这对错误开放,因此请谨慎使用:

将 Product 列转换为列表的集合,这些列表的大小与其他列中的列表相同(例如,列 SKU。如果 SKU 和 Size 中的列表长度不同,这将不起作用)

df["Product"] = df["Product"].map(list) * df["SKU"].map(len)

Out[184]:
SKU Size Product
0 [111, 222, 333, 444] [XS, S, M, L] [a, a, a, a]
1 [555, 666] [M, L] [b, b]

获取列的总和(它将扩展列表)并使用 to_dict() 将其传递给数据框构造函数:

pd.DataFrame(df.sum().to_dict())
Out[185]:
Product SKU Size
0 a 111 XS
1 a 222 S
2 a 333 M
3 a 444 L
4 b 555 M
5 b 666 L

编辑:

对于多个列,您可以定义要重复的列:

cols_to_be_repeated = ["Product", "ProductType"]

将没有值的行保存在另一个数据框中:

na_df = df[pd.isnull(df["SKU"])].copy()

从原始数据框中删除 None:

df.dropna(inplace = True)

迭代这些列:

for col in cols_to_be_repeated:
df[col] = df[col].map(lambda x: [x]) * df["SKU"].map(len)

并使用相同的方法:

pd.concat([pd.DataFrame(df.sum().to_dict()), na_df])

Product ProductType SKU Size
0 T-shirt Top 111.0 XS
1 T-shirt Top 222.0 S
2 T-shirt Top 333.0 M
3 T-shirt Top 444.0 L
4 Pant(Flared) Bottoms 555.0 M
5 Pant(Flared) Bottoms 666.0 L
2 Sweater Top NaN None

处理原始数据框的副本可能会更好。

关于python 将数据框列拆分为多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37244595/

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