我有一个数据框列,其中包含一个整数值或两个整数范围。我想创建一个最终列,将范围值平均,以使该列成为纯整数。
我试图使用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,其中列中存在范围。预期输出在“平均”列中。
答案 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