gpt4 book ai didi

python - 如何在 Pandas DataFrame 的列表列中展平分隔字符串?

转载 作者:行者123 更新时间:2023-12-04 01:03:00 25 4
gpt4 key购买 nike

我有一个带有一个列表列的 Pandas DataFrame,例如:

df = pd.DataFrame({"pairs": [["A|B", "B|C", "C|D", "D|F"], ["A|D", "D|F", "F|G", "G|D"], ["C|D", "D|X"]]})
pairs 中的列表列始终包含连续的对,其中对的 2 个元素由 | 分隔.我想“展平”这些列中的列表,而不是存储对,现在以相同的顺序存储对的元素。所以所需的 DataFrame 看起来像:
elements
[A, B, C, D, F]
[A, D, F, G, D]
[C, D, X]
(编辑:我也希望元素在结果列表中多次出现,例如第二行中的 D)
这看起来很简单,我不敢相信没有有效的解决方案,但到目前为止我还没有找到任何可以帮助我的 python 方法

最佳答案

您可以使用集合理解:

df["elements"] = df["pairs"].apply(
lambda x: {ww for w in x for ww in w.split("|")}
)
print(df)
打印:
                  pairs         elements
0 [A|B, B|C, C|D, D|F] {B, C, D, A, F}
1 [A|D, D|F, F|G] {G, D, F, A}
2 [C|D, D|X] {X, C, D}

如果你想要列表:
df["elements"] = df["pairs"].apply(
lambda x: list({ww for w in x for ww in w.split("|")})
)
print(df)
                  pairs         elements
0 [A|B, B|C, C|D, D|F] [D, F, A, C, B]
1 [A|D, D|F, F|G] [G, D, A, F]
2 [C|D, D|X] [X, D, C]

编辑:维持秩序:
def fn(x):
seen = set()
out = []
for v in x:
for w in v.split("|"):
if not w in seen:
seen.add(w)
out.append(w)
return out


df["elements"] = df["pairs"].apply(fn)
print(df)
打印:
                  pairs         elements
0 [A|B, B|C, C|D, D|F] [A, B, C, D, F]
1 [A|D, D|F, F|G, G|D] [A, D, F, G]
2 [C|D, D|X] [C, D, X]


编辑:保持多个元素+顺序:
from itertools import groupby, chain

def fn(x):
return [v for v, _ in groupby(chain.from_iterable(v.split("|") for v in x))]

df["elements"] = df["pairs"].apply(fn)
print(df)
打印:
                  pairs         elements
0 [A|B, B|C, C|D, D|F] [A, B, C, D, F]
1 [A|D, D|F, F|G, G|D] [A, D, F, G, D]
2 [C|D, D|X] [C, D, X]

关于python - 如何在 Pandas DataFrame 的列表列中展平分隔字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67559977/

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