Python 如何使用字符串进行分组
我一直在努力解决一个我以前发布过的问题。现在我有一个df,只要Python 如何使用字符串进行分组,python,pandas,dataframe,Python,Pandas,Dataframe,我一直在努力解决一个我以前发布过的问题。现在我有一个df,只要类型和名称匹配,我就想在配对中添加数字。我使用groupby方法取得了一些成功,如下所示: x = df['type'].str[:5] df['Pairing'] = df.groupby([x, 'Name']).ngroup()+1 Name | type | Pairing --------------------------- Charles |Circle | 1 Scott |Sq
类型
和名称
匹配,我就想在配对中添加数字。我使用groupby方法取得了一些成功,如下所示:
x = df['type'].str[:5]
df['Pairing'] = df.groupby([x, 'Name']).ngroup()+1
Name | type | Pairing
---------------------------
Charles |Circle | 1
Scott |Square | 2
Scott |Triangle | 3
Anne |Rectangle | 4
Anne |Rectangle2 | 4
Anne |Oval | 5
Anne |Oval | 5
Bart |Octagon | 6
我使用.str[:5]
,因为有时一个数字或符号会附加到一个类型,而不是另一个。这个方法很有效,但是如果我有一个像Oval
这样的类型,它就不起作用了,因为它小于5
我不知道如何解决这个问题。如果有人有任何建议,请让我知道!我想知道和语句是否在这里起作用?尝试使用条带消除前导空格:
x = df['type'].str.strip().str[:5]
或者使用extract
删除所有非字母字符,如下所示:
x = df['type'].str.extract('^[^a-zA-Z]*([a-zA-Z]+)')[0].str[:5]
尝试使用条带
消除前导空格:
x = df['type'].str.strip().str[:5]
或者使用extract
删除所有非字母字符,如下所示:
x = df['type'].str.extract('^[^a-zA-Z]*([a-zA-Z]+)')[0].str[:5]
这将删除以下数字:
x = df['type'].str.replace('\d+', '')
这将删除以下数字:
x = df['type'].str.replace('\d+', '')
嗯,我并不特别想删除数字,我希望str小于5的类型
能够正确分组然后创建一个新列:df['type\u abc']=df['type'].str.replace('\d+,'')嗯,我不特别想删除数字,我希望str小于5的类型
能够正确分组。然后创建一个新列:df['type\u abc']=df['type'].str.replace('\d+','')哇,我认为这很有效!我需要做更多的检查,但看起来效果不错。非常感谢。我不熟悉编码和python,如果您有时间,我想了解这一行发生了什么(^[^a-zA-Z]*([a-zA-Z]+)
explain@Rockey试试看。哇,我觉得这很有效!我需要做更多的检查,但看起来效果不错。非常感谢。我不熟悉编码和python,如果您有时间,我想了解这一行发生了什么(^[^a-zA-Z]*([a-zA-Z]+)
explain@Rockey尝试