Python 按列中字符串值的一部分对数据帧进行切片
我有一个pandas数据框,其中包含一个带有9个字符串的列。我想在数据框中找到与该字符串中9个字符中的前3个匹配的行 我当前的解决方案在dataframe中创建一个新列,该列只对字符串的前3个字符进行切片,但我希望在不创建新列的情况下解决这个问题(因为我以后必须删除它)。如果可以的话,我通常不愿意改变数据帧 例如:Python 按列中字符串值的一部分对数据帧进行切片,python,pandas,string,dataframe,slice,Python,Pandas,String,Dataframe,Slice,我有一个pandas数据框,其中包含一个带有9个字符串的列。我想在数据框中找到与该字符串中9个字符中的前3个匹配的行 我当前的解决方案在dataframe中创建一个新列,该列只对字符串的前3个字符进行切片,但我希望在不创建新列的情况下解决这个问题(因为我以后必须删除它)。如果可以的话,我通常不愿意改变数据帧 例如: import pandas as pd # sample dataframe: cid=[1,2,3,4,5,6,7,8,9,10] strings=[ 'tncduuqc
import pandas as pd
# sample dataframe:
cid=[1,2,3,4,5,6,7,8,9,10]
strings=[
'tncduuqcr',
'xqjfykalt',
'arzouazgz',
'tncknojbi',
'xqjgfcekh',
'arzupnzrx',
'tncfjxyox',
'xqjeboxdn',
'arzphbdcs',
'tnctnfoyi',
]
df=pd.DataFrame(list(zip(cid,strings)),columns=['cid','strings'])
# This is the step I would like to avoid doing:
df['short_strings']=df['strings'].str[0:3]
out_dict={}
for x in df['short_strings'].unique():
df2=df[df['short_strings']==x]
out_dict[x]=df2
# the separate dataframes:
for x in out_dict.keys():
print(out_dict[x])
输出:
cid strings short_strings
0 1 tncduuqcr tnc
3 4 tncknojbi tnc
6 7 tncfjxyox tnc
9 10 tnctnfoyi tnc
cid strings short_strings
1 2 xqjfykalt xqj
4 5 xqjgfcekh xqj
7 8 xqjeboxdn xqj
cid strings short_strings
2 3 arzouazgz arz
5 6 arzupnzrx arz
8 9 arzphbdcs arz
我尝试过简单地比较
==df['strings'].str[0:3]
,但这似乎不起作用。对于这种类型的操作,我们使用+,在这里使用系列进行索引。unique
速度较慢:
mydict = dict(df.groupby(df.strings.str[:3]).__iter__())
print(mydict)
输出
{'arz': cid strings
2 3 arzouazgz
5 6 arzupnzrx
8 9 arzphbdcs,
'tnc': cid strings
0 1 tncduuqcr
3 4 tncknojbi
6 7 tncfjxyox
9 10 tnctnfoyi,
'xqj': cid strings
1 2 xqjfykalt
4 5 xqjgfcekh
7 8 xqjeboxdn}
您能否将预期的输出添加到您的问题中?我已经添加了打印的数据帧。我应该更清楚-在我的应用程序中,我只对组的一个子集感兴趣,其中一些将被分组在一起。因此,我可以用我感兴趣的字符串列表替换.unique。此外,一些字符串将分组在一起(例如:“arz”和“tnc”保存在同一数据帧/字典条目中)。groupby有没有办法做到这一点?(或者更好地问:有没有办法在groupby中包含“如果”语句?)