Python 数据帧中的动态索引字符串切片

Python 数据帧中的动态索引字符串切片,python,pandas,Python,Pandas,我有一个数据帧列,它要么是一个整数值,要么是两个整数的范围。我想创建一个最后的列,在其中对范围值进行平均,以便该列成为纯整数 我试图使用pandas.str.find(“-”)来查找断点的位置,然后使用np.where()为范围中的第一个值和第二个值创建单独的列 import numpy as np import pandas as pd d = {'A' : ['1234', '12 - 16'], 'Avg':[1234, 14]} df= pd.DataFrame(d) df['bp'

我有一个数据帧列,它要么是一个整数值,要么是两个整数的范围。我想创建一个最后的列,在其中对范围值进行平均,以便该列成为纯整数

我试图使用pandas.str.find(“-”)来查找断点的位置,然后使用np.where()为范围中的第一个值和第二个值创建单独的列

import numpy as np
import pandas as pd

d = {'A' : ['1234', '12 - 16'], 'Avg':[1234, 14]}
df= pd.DataFrame(d)

df['bp'] = df['A'].str.find("-")
df['F'] = np.where(df['bp']>0, df['A'].str.slice(0, df['bp']), df['A'])

我得到了列中存在范围的NAN。预期输出在“平均”列中。

使用
str.split

df['A'].str.split(' - ').apply(lambda s: sum(map(int,s))/len(s),1)


您可以使用str函数和explode(熊猫大于0.25)

您的索引必须是唯一的,或者您需要调用
df.reset\u index
才能工作

将熊猫作为pd导入
d={'A':['1234','12-16'],'Avg':[1234,14]}
df=pd.数据帧(d)
df[“A”].str.split(“-”.explode().astype(pd.np.int).groupby(level=0).mean()

使用
extractall
并直接在
level=0上调用
mean

df.A.str.extractall(r'(\d+)').astype(int).mean(level=0)[0]

Out[64]:
0    1234
1      14
Name: 0, dtype: int32

你确定这是矢量化的吗?使用
split
explode
对我来说根本不是矢量化;]。事实上,这个解决方案实际上比使用纯apply慢(这反过来可能比这里简单的列表理解本身慢一点)
df.A.str.extractall(r'(\d+)').astype(int).mean(level=0)[0]

Out[64]:
0    1234
1      14
Name: 0, dtype: int32