gpt4 book ai didi

python - 将不同的条目拆分成单独的行,只允许某些组合

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

我在网上搜索了一个答案,但是,虽然有人问过类似的问题,但它们并不相同,我无法使用它们。

我有一个 pandas 数据框,其中几列文本字符串有时包含逗号分隔值。我想拆分包含其中三个逗号分隔值的每个 CSV 字段,为每个条目创建一个新行,但以这种方式并行(使用 A、C 和 D,不使用 E):

In [10]: before 
Out[10]:
A B C D E
0 a1,a2,a3 1 c1, c2, c3 d1,d2,d3 e1,e2,e3
1 a4 2 c4 d4 e4

In [11]: after
Out[11]:
A B C D E
0 a1 1 c1 d1 e1,e2,e3
1 a2 1 c2 d2 e1,e2,e3
2 a3 1 c3 d3 e1,e2,e3
3 a4 2 c4 d4 e4

问题是,它应该适用于不同的表,并且所有这些表可能有不同的列(但总是这三个,A、C 和 D,具有相同的名称)。此外,其他列在某些未拆分的单元格中可能具有逗号分隔值,就像 E 中发生的那样。

编辑:这三列在同一行中总是有相同数量的逗号分隔值,但它可以在行之间变化(1 个值、2 个逗号分隔值、3 个逗号分隔值...)。

很抱歉,我想提供一些代码,但我无法提供任何远程有用的东西。

有人可以帮助我吗?我真的很感激任何帮助! :)

最佳答案

如果您知道三列始终具有相同数量的逗号分隔值,您可以这样做:

>>> df
A B C D E
0 a1,a2,a3 1 c1,c2,c3 d1,d2,d3 e1,e2,e3
1 a4 2 c4 d4 e4

拆分每一列:

>>> for col in ['A', 'C', 'D']:
... df[col] = df[col].str.split(',')
...
>>> df
A B C D E
0 [a1, a2, a3] 1 [c1, c2, c3] [d1, d2, d3] e1,e2,e3
1 [a4] 2 [c4] [d4] e4

定义索引器:

>>> i = df['A'].map(len)
>>> j = np.repeat(np.arange(len(df)), i)
>>> k = np.concatenate(list(map(np.arange, i)))

展开框架:

>>> df = df.iloc[j]
>>> df
A B C D E
0 [a1, a2, a3] 1 [c1, c2, c3] [d1, d2, d3] e1,e2,e3
0 [a1, a2, a3] 1 [c1, c2, c3] [d1, d2, d3] e1,e2,e3
0 [a1, a2, a3] 1 [c1, c2, c3] [d1, d2, d3] e1,e2,e3
1 [a4] 2 [c4] [d4] e4

从每个列表中取一个:

>>> for col in ['A', 'C', 'D']:
... df[col] = list(map(lambda xs, i: xs[i], df[col], k))
...
>>> df
A B C D E
0 a1 1 c1 d1 e1,e2,e3
0 a2 1 c2 d2 e1,e2,e3
0 a3 1 c3 d3 e1,e2,e3
1 a4 2 c4 d4 e4

关于python - 将不同的条目拆分成单独的行,只允许某些组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25524916/

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