gpt4 book ai didi

python - Str 包含 from 列表并按列表项区分

转载 作者:行者123 更新时间:2023-12-02 06:46:44 25 4
gpt4 key购买 nike

我有一个数据框df,有两列:脚本(带文本)和演讲者

Script  Speaker
aze Speaker 1
art Speaker 2
ghb Speaker 3
jka Speaker 1
tyc Speaker 1
avv Speaker 2
bhj Speaker 1

我有以下列表:list = ['a','b','c']

我的目标是获得这样的矩阵/数据框,仅包含我列表中的项目。

Speaker     a    b    c
Speaker 1 2 1 1
Speaker 2 2 0 0
Speaker 3 0 1 0

我尝试了以下方法:

r = '|'.join(list)

nb_df = df[df['Script'].str.contains(r, case = False)]
df_target = nb_df.groupby('Speaker')['Speaker'].count()

我得到了目标的一部分,我知道每个说话者说了多少时间从列表中搜索的项目。但我无法区分每个项目的时间数。

  1. 如何使用 pandas 函数(如果存在)制作它
  2. 如何使用 Python 循环实现?

最佳答案

首先不要像变量一样使用list,因为内置(python代码字)。

使用crosstabSeries.str.extractall :

print (df)
Script Speaker
0 azc Speaker 1 <-change sample data
1 art Speaker 2
2 ghb Speaker 3
3 jka Speaker 1
4 tyc Speaker 1
5 avv Speaker 2
6 bhj Speaker 1

L = ['a','b','c']
pat = r'({})'.format('|'.join(L))
df = df.set_index('Speaker')['Script'].str.extractall(pat)[0].reset_index(name='val')

df = pd.crosstab(df['Speaker'], df['val'])
print (df)
val a b c
Speaker
Speaker 1 2 1 2
Speaker 2 2 0 0
Speaker 3 0 1 0

如果性能不是那么重要,请使用 3 个文本函数 Series.str.findall , Series.str.joinSeries.str.get_dummies和每个级别的总和:

df = (df.set_index('Speaker')['Script'].str.findall('|'.join(L))
.str.join('|')
.str.get_dummies()
.sum(level=0))
print (df)
a b c
Speaker
Speaker 1 2 1 2
Speaker 2 2 0 0
Speaker 3 0 1 0

关于python - Str 包含 from 列表并按列表项区分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59486018/

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