gpt4 book ai didi

python - Pandas - 检查列中的值是否是同一列中另一个值的子字符串

转载 作者:太空宇宙 更新时间:2023-11-03 20:06:21 24 4
gpt4 key购买 nike

我正在尝试编写一个脚本来检查 DataFrame 的列,每个值不是另一个值的子字符串,并且不等于不同的列。我编写了一个代码,它遍历 iterrows 并为每行返回其他子字符串值。一个例子:

df = pd.DataFrame({'names': ['Bob', 'Sam', 'Tom', 'Bob'], 'value': ['abc', 'ab', 'de', 'ab']})
>>> df
names value
0 Bob abc
1 Sam ab
2 Tom de
3 Bob ab

substring_df = pd.DataFrame(columns=df.columns)
for index, row in df.iterrows():
value = row["value"]
name = row["names"]
delta = df[df['value'].str.contains(value) & df['names'] == name]
if(len(delta.index) > 1):
substring_df = pd.concat([substring_df, delta])
>>> substring_df
names value
0 Bob abc
3 Bob ab

这段代码工作正常,但对于大量数据来说速度非常慢。在包含 10,000 行的 DataFrame 上运行它需要 2 分钟才能返回,而且我需要在更大的数据上运行它。

关于如何使此代码更高效有什么想法吗?

最佳答案

使用GroupBy.transform使用 in 找到子字符串的生成器,并按 boolean indexing 过滤组:

df = pd.DataFrame({"names": ["Bob", "Bob", "Bob", "Alice"], "value": ["abc", "ab", "d", "a"]}) 
print (df)
names value
0 Bob abc
1 Bob ab
2 Bob d
3 Alice a

f = lambda x: x.isin([w for y in x for z in x if z != y and z in y for w in (z, y)])

df = df[df.groupby('names')['value'].transform(f)]
print (df)
names value
0 Bob abc
1 Bob ab

关于python - Pandas - 检查列中的值是否是同一列中另一个值的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58951185/

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