首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >根据标签划分两个行值,并创建一个新列来填充计算值

根据标签划分两个行值,并创建一个新列来填充计算值
EN

Stack Overflow用户
提问于 2019-04-29 01:06:53
回答 1查看 30关注 0票数 2

Python新手,正在寻求帮助。

我想将值划分为两个不同的行(同一列的一部分),然后用计算出的值插入一个新列

代码语言:javascript
复制
    City              2017-18                     Item
0       Boston              100                       Primary
1       Boston              200                       Secondary
2       Boston              300                       Tertiary
3       Boston              400                       Nat'l average
4       Chicago             500                       Primary
5       Chicago             600                       Secondary
6       Chicago             700                       Tertiary
7       Chicago             800                       Nat'l average

在上面的Dataframe上,我试图将一个城市的一级、二级和三级值分别除以该城市的Nat'l平均值。要在同一数据帧的新列部分中填充的结果答案。经过计算,标签为'Nat'l average‘的行需要删除。

感谢你的帮助。

代码语言:javascript
复制
         City         2014-15         Item             New_column
0       Boston         100           Primary          100/400
1       Boston         200           Secondary        200/400
2       Boston         300           Tertiary         300/400
3       Chicago        500           Primary          500/800 
4       Chicago        600           Secondary        600/800
5       Chicago        700           Tertiary         700/800
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-29 01:09:48

如果每个组的平均值始终是最后一个,则将列除以由GroupBy.transformGroupBy.last创建的Series

代码语言:javascript
复制
df['new'] = df['2017-18'].div(df.groupby('City')['2017-18'].transform('last'))

如果不是,则首先使用averages筛选值并除以Series.maping级数:

代码语言:javascript
复制
s = df[df['Item'] == "Nat'l average"].set_index('City')['2017-18']
df['new'] = df['2017-18'].div(df['City'].map(s))

最后按boolean indexing过滤出行

代码语言:javascript
复制
df = df[df['Item'] != "Nat'l average"]
print (df)
      City  2017-18       Item    new
0   Boston      100    Primary  0.250
1   Boston      200  Secondary  0.500
2   Boston      300   Tertiary  0.750
4  Chicago      500    Primary  0.625
5  Chicago      600  Secondary  0.750
6  Chicago      700   Tertiary  0.875

详细信息:

代码语言:javascript
复制
print (df['City'].map(s))
0    400
1    400
2    400
3    400
4    800
5    800
6    800
7    800
Name: City, dtype: int64
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55892660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档