gpt4 book ai didi

python - 比较 pandas DataFrame 列中的多个字符串

转载 作者:太空宇宙 更新时间:2023-11-04 04:44:41 27 4
gpt4 key购买 nike

我在 Python3.x 中有以下 pandas DataFrame,有几个数字列和两个字符串列:

import numpy as np
import pandas as pd

dict = {"numericvals": np.repeat(25, 8),
"numeric":np.repeat(42, 8),
"first":["beneficiary, duke", "compose", "herd primary", "stall", "deep", "regular summary classify", "timber", "property”],
"second": ["abcde”, "abcde”, "abcde”, "abcde”, "abcde”, "abcde”, "abcde”, "abcde”]}

df = pd.DataFrame(dict1)

df = df[['numeric', 'numericvals', 'first', 'second']]

print(df)
numeric numericvals first second
0 42 25 beneficiary, duke abcde
1 42 25 compose abcde
2 42 25 herd primary abcde
3 42 25 stall abcde
4 42 25 deep abcde
5 42 25 regular summary classify abcde
6 42 25 timber abcde
7 42 25 property abcde

first 列包含一个或多个字符串。如果不止一个,则用空格或逗号分隔。

我的目标是创建一个列来记录 first 中字符串的长度,这些字符串的长度比 second 中的字符串长或短。如果这些大小相同,则应忽略这种情况。

我的想法是创建两个列表:

longer = []
shorter = []

如果first中的字符串较长,则通过len()将字符串长度追加到longer中。如果字符串较短,则通过len()将字符串长度记录在short中。

分析应该是这样的(pandas DataFrame 格式):

   numericvals numeric                   first second  longer  shorter
0 25 42 beneficiary, duke abcde 11 4
1 25 42 compose abcde 7 0
2 25 42 herd primary abcde 7 4
3 25 42 stall abcde 0 0
4 25 42 deep abcde 0 4
5 25 42 regular summary classify abcde 7, 7, 8 0
6 25 42 timber abcde 6 0
7 25 42 property abcde 8 0

我不知道如何在 first 中处理多个字符串,尤其是当有 3 个时。应该如何在 pandas 中进行这种比较?

最佳答案

您可以使用pandas.DataFrame.apply (source) :

import operator

def transform(df, op):
lengths = [len(s) for s in df['first'].replace(',', ' ').split()]
return [f for f in lengths if op(f, len(df.second))] or [0]

df['longer'] = df.apply(transform, axis=1, args=[operator.gt])
df['shorter'] = df.apply(transform, axis=1, args=[operator.lt])

这应该适用于任何数量的字符串,假设任何空格或逗号表示一个新字符串。

这是输出:

   numeric  numericvals                     first second     longer shorter
0 42 25 beneficiary, duke abcde [11] [4]
1 42 25 compose abcde [7] [0]
2 42 25 herd primary abcde [7] [4]
3 42 25 stall abcde [0] [0]
4 42 25 deep abcde [0] [4]
5 42 25 regular summary classify abcde [7, 7, 8] [0]
6 42 25 timber abcde [6] [0]
7 42 25 property abcde [8] [0]

我尽力了。希望这对您有所帮助!

关于python - 比较 pandas DataFrame 列中的多个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49888736/

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