我有一个数据框,在第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
答案 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]))