基于部分值创建类别

2024-06-28 19:03:07 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我有一个数据框,如下所示:

response                         ticket
so service reset performed        123
reboot  done                      343
restart performed                 223
no value                          444
ticket created                    765

我试着这样做:

import pandas as pd
df = pd.read_excel (r'C:\Users\Downloads\response.xlsx')
print (df)
count_other = 0
othersvocab = ['Service reset' , 'Reboot' , 'restart']

if df.response = othersvocab
{
count_other = count_other + 1
}

我想做的是计算有多少人有“OthersVocable”和有多少人没有。 我对Python真的是个新手,我不知道如何做到这一点

预期产出:

other          ticketed
 3                2

你能帮我弄明白吗,希望你的代码中发生了什么


Tags: 数据dfsoresponsecountserviceticketpd
2条回答

考虑以下{^ }:

In [744]: df = pd.DataFrame({'response':['so service reset performed', 'reboot  done', 'restart performed', 'no value', 'ticket created'], 'ticket':[123, 343, 223, 444, 765]})

In [745]: df
Out[745]: 
                     response  ticket
0  so service reset performed     123
1                reboot  done     343
2           restart performed     223
3                    no value     444
4              ticket created     765

以下是您的othersvocab

In [727]: othersvocab = ['Service reset' , 'Reboot' , 'restart']

# Converting all elements to lowercase
In [729]: othersvocab = [i.lower() for i in othersvocab] 

使用^{}

# Converting response column to lowercase
In [733]: df.response = df.response.str.lower() 

In [740]: count_in_vocab = len(df[df.response.str.contains('|'.join(othersvocab))])
    
In [742]: count_others = len(df) - count_in_vocab

In [752]: res = pd.DataFrame({'other': [count_in_vocab], 'ticketed': [count_others]})

In [753]: res
Out[753]: 
   other  ticketed
0      3         2

我是在午休时间做这件事的,我不喜欢我的for other in others东西,有更好的方法使用pandas数据帧方法,你可以使用,但必须这样做

import pandas as pd

df = pd.DataFrame({"response": ["so service reset performed", "reboot  done", 
"restart performed"],
                   "ticket": [123, 343, 223]})

others = ['service reset' , 'reboot' , 'restart']

count_other = 0
for row in df["response"].values:
    for other in others:
        if other in row:
            count_other += 1

因此,首先您需要解决的是,如果您想以我的方式执行此操作,您必须将response列和others变量小写,这并不难(查找pandas apply和string操作符.lower)

  1. 我在这里做的是首先循环循环循环列中的值

  2. 然后在这个循环中,我在others列表项上循环

  3. 最后看看这些是否在列表中

我希望我仓促的反应能帮上忙

相关问题 更多 >