gpt4 book ai didi

python - 如何在 Pandas DataFrame 中将可变大小的基于字符串的列拆分为多列?

转载 作者:行者123 更新时间:2023-12-03 16:48:18 25 4
gpt4 key购买 nike

我有一个 pandas DataFrame,其形式为:

A      B       C     D
A1 6 7.5 NaN
A1 4 23.8 <D1 0.0 6.5 12 4, D2 1.0 4 3.5 1>
A2 7 11.9 <D1 2.0 7.5 10 2, D3 7.5 4.2 13.5 4>
A3 11 0.8 <D2 2.0 7.5 10 2, D3 7.5 4.2 13.5 4, D4 2.0 7.5 10 2, D5 7.5 4.2 13.5 4>
专栏 电话 是每个条目中包含多个类别的原始字符串列。条目的值是通过将每个类别的最后两个值相除来计算的。例如,在第二行:
D1 = 12/4 = 3
D2 = 3.5/1 = 3.5
我需要拆分列 电话 基于它的类别并将它们加入我的DataFrame。问题是该列是动态的,单个条目中可以包含近 35-40 个类别。现在,我所做的只是一个 蛮力通过迭代所有行的方法,这对于大型数据集来说非常慢。有人可以帮帮我吗?
预期结果
A      B       C     D1  D2  D3  D4  D5
A1 6 7.5 NaN NaN NaN NaN NaN
A1 4 23.8 3.0 3.5 NaN NaN NaN
A2 7 11.9 5.0 NaN 3.4 NaN NaN
A3 11 0.8 NaN 5.0 3.4 5.0 3.4

最佳答案

使用:

d = df['D'].str.extractall(r'(D\d+).*?([\d.]+)\s([\d.]+)(?:,|\>)')
d = d.droplevel(1).set_index(0, append=True).astype(float)
d = df.join(d[1].div(d[2]).round(1).unstack()).drop('D', 1)

详情:
使用 Series.str.extractall 从列 D 中提取所有捕获组由 regex 指定图案。您可以测试 regex图案 here .
print(d)
0 1 2 # --> capture groups
match
1 0 D1 12 4
1 D2 3.5 1
2 0 D1 10 2
1 D3 13.5 4
3 0 D2 10 2
1 D3 13.5 4
2 D4 10 2
3 D5 13.5 4
使用 DataFrame.droplevel + set_index带可选参数 append=True删除未使用的级别并将新索引附加到数据农场。
print(d)
1 2
0
1 D1 12.0 4.0
D2 3.5 1.0
2 D1 10.0 2.0
D3 13.5 4.0
3 D2 10.0 2.0
D3 13.5 4.0
D4 10.0 2.0
D5 13.5 4.0
使用 Series.div 分栏 1通过 2并使用 Series.round 对值进行四舍五入,然后使用 Series.unstack reshape 数据框,然后使用 DataFrame.join 使用 df 加入新数据框
print(d)
A B C D1 D2 D3 D4 D5
0 A1 6 7.5 NaN NaN NaN NaN NaN
1 A1 4 23.8 3.0 3.5 NaN NaN NaN
2 A2 7 11.9 5.0 NaN 3.4 NaN NaN
3 A3 11 0.8 NaN 5.0 3.4 5.0 3.4

关于python - 如何在 Pandas DataFrame 中将可变大小的基于字符串的列拆分为多列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63147292/

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