按列中的单词获取平均值

时间:2019-07-29 08:58:59

标签: python

我有一个数据框,在第1列中有一些文本,在第2列中有一个值。 第1列每行可以包含多个城市名称。此外,我还列出了每个城市的名称。现在,我想从列2中获得列表中存在的每个城市的平均值。

Citylist = ["CityA","CityB"]
List1 = ["CityA Lorem ipsum dolor sit amet, CityB","CityA Lorem ipsum dolor sit amet","Lorem ipsum dolor sit amet CityB"]
List2 = [1,2,3]
df = pd.DataFrame(list(zip(List1, List2)), 
               columns =['Name', 'val']) 

结果应为A城市1.5和B城市2.0

2 个答案:

答案 0 :(得分:2)

首先按cityName列追加数据框:

for cityName in ['CityA', 'CityB']:
    df.loc[:, cityName] = df.Name.apply(lambda x: cityName in x)
print(df)

输出:

                                      Name  val  CityA  CityB
0  CityA Lorem ipsum dolor sit amet, CityB    1   True   True
1         CityA Lorem ipsum dolor sit amet    2   True  False
2         Lorem ipsum dolor sit amet CityB    3  False   True

现在您可以使用生成的数据框,例如:

for cityName in ['CityA', 'CityB']:
    print(cityName, np.mean(df[df[cityName]].val.tolist()))

输出:

CityA 1.5
CityB 2.0

答案 1 :(得分:2)

这是我的建议:

avg_dict = {}
for city in Citylist:
    avg_dict[city] = df.loc[df['Name'].str.contains(city), 'val'].mean()
    print("Average for {}: {:.2f}".format(city, avg_dict[city]))
相关问题