python - 按数据框中的字符串过滤并添加单独的值
问题描述
鉴于此数据框,是否可以查找特定字符串,例如位于国家/地区列表中的国家/地区?(例如,'Country' 中的第一个索引,其中包含单词 Japan,其对应的值为 1)。是否可以总结出每个国家对应的值?(最终结果:日本:1+3=4 美国:2 欧洲:4)
countries=["Europe","USA","Japan"]
df=pd.DataFrame={'Employees':[1,2,3,4],
'Country':['Japan;Security','USA;Google',"Japan;Sega","Europe;Google"]}
print(df)
谢谢
解决方案
如果您只想使用国家列表中指定的值。你可以做这样的事情 -
patt = '(' + '|'.join(countries) + ')'
grp = df.Country.str.extract(pat=patt, expand=False).values
new_df = df.groupby(grp).agg({'Employees': sum})
例如,如果初始国家/地区列表缺少“日本”-
countries = ["Europe", "USA"]
patt = '(' + '|'.join(countries) + ')'
grp = df.Country.str.extract(pat=patt, expand=False).values
new_df = df.groupby(grp, dropna=False).agg({'Employees': sum}).reset_index().rename(
columns={'index': 'Country'}).fillna('other')
输出-
Country Employees
0 Europe 4
1 USA 2
2 other 4 # see the change
推荐阅读
- apache - Cassandra 多 DC:在 LOCAL 上写入并从任何 DC 读取
- php - 如何检查特定用户是否登录 Laravel?
- algorithm - 如何优化具有大量点的图形的绘制算法?
- django - Google API 范围已更改
- sql - SQL Server 错误:948:数据库无法打开,因为它的版本是 896。此服务器支持版本 782 或更早版本?
- php - Nginx 404 上的 Laravel
- node.js - 访问 Windows 上传文件对话框
- .net - Access-Control-Max-Age 的最大值和默认值
- android - 将 infoWindow 放置在远离重叠多段线的位置
- c - 多线程程序中执行的线程顺序