Pandas Dataframe中的动态索引字符串切片

时间:2019-10-16 03:12:14

标签: python pandas

我有一个数据框列,其中包含一个整数值或两个整数范围。我想创建一个最终列,将范围值平均,以使该列成为纯整数。

我试图使用pandas.str.find(“-”)查找断点的位置,然后使用np.where()为Range中的First Value和Second Value创建单独的列。

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,其中列中存在范围。预期输出在“平均”列中。

3 个答案:

答案 0 :(得分:2)

使用str.split

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

0    1234.0
1      14.0
Name: A, dtype: float64

答案 1 :(得分:0)

您可以使用str函数使用向量化(不带如下所示的apply函数)进行操作并爆炸(0.25以上的熊猫)

您的索引必须唯一,否则您需要致电df.reset_index才能正常工作

import pandas as pd

d = {'A' : ['1234', '12 - 16'], 'Avg':[1234, 14]}
df= pd.DataFrame(d)
df["A"].str.split("-").explode().astype(pd.np.int).groupby(level=0).mean()

答案 2 :(得分:0)

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

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

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