在过滤时从pandas dataframe获取子字符串

Edu*_*rdo 7 python pandas

假设我有一个包含以下信息的数据框:

Name    Points          String
John        24     FTS8500001A
Richard     35     FTS6700001B
John        29     FTS2500001A
Richard     35     FTS3800001B
John        34     FTS4500001A

以下是使用上面的示例获取DataFrame的方法:

import pandas as pd
keys = ('Name', 'Points', 'String')
names = pd.Series(('John', 'Richard', 'John', 'Richard', 'John'))
ages = pd.Series((24,35,29,35,34))
strings = pd.Series(('FTS8500001A','FTS6700001B','FTS2500001A','FTS3800001B','FTS4500001A'))
df = pd.concat((names, ages, strings), axis=1, keys=keys)
Run Code Online (Sandbox Code Playgroud)

我想选择符合以下条件的每一行:Name = Richard And Points = 35.对于这样的行,我想读取String列的第4个和第5个字符(FTS之后的两个数字).

我想要的输出是数字67和38.

我已经尝试了几种方法来实现它,但结果为零.你能帮忙吗?

非常感谢你.
爱德华多

EdC*_*ica 11

使用布尔掩码过滤你的df,然后调用str并切片字符串:

In [77]:
df.loc[(df['Name'] == 'Richard') & (df['Points']==35),'String'].str[3:5]

Out[77]:
1    67
3    38
Name: String, dtype: object
Run Code Online (Sandbox Code Playgroud)


fir*_*ynx 7

熊猫字符串方法

您可以根据标准对其进行掩码,然后使用pandas字符串方法

mask_richard = df.Name == 'Richard'
mask_points = df.Points == 35
df[mask_richard & mask_points].String.str[3:5]

1    67
3    38
Run Code Online (Sandbox Code Playgroud)