python - 按列中的部分字符串值对熊猫数据框进行切片
问题描述
我有一个 pandas 数据框,其中包含一个包含 9 个字符串的列。我想在数据框中找到与该字符串中 9 个字符中的前 3 个匹配的行。
我当前的解决方案在数据框中创建了一个新列,它只是对字符串的前 3 个字符进行切片,但我想在不创建新列的情况下解决这个问题(因为我以后必须删除它)。如果可以提供帮助,我通常不喜欢更改数据框。
例子:
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]
,但这似乎不起作用。
解决方案
DataFrame.groupby()
对于我们使用+的这种类型的操作GroupBy.__iter__()
,这里的索引Series.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}
推荐阅读
- javascript - 尝试访问 json 内容并以网格方式显示
- python - Keras:从自定义生成器中获取单个批次
- jenkins - Jenkins 围绕管道共享库脚本触发包装器
- opencart - 如何在 Opencart 前端接收模块 ID
- python - 通过每组两个数据元素创建行的有效方法是什么?
- groovy - 在 groovy 中使用带反斜杠的 sed
- distance - 距离采样代码,出现我不知道如何解决的错误
- powershell - 我在尝试运行 powershell 脚本时遇到错误 - 意外的令牌
- python-3.x - 如何将 python 控制台输出嵌入到 wxPython
- azerothcore - windows 10下AzerothCore DB自动安装的问题