Python的新手,正在寻求帮助。
我想将值分成两个不同的行(同一列的一部分),然后插入具有计算值的新列
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
在上述数据框上,我试图将城市的主要,中学和第三级值分别除以该城市的Nat'l平均值。结果答案将填充在同一Dataframe的新列部分中。计算后,需要删除标签为“平均水平”的行。
感谢您的帮助...
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
答案 0 :(得分:3)
如果平均值始终是每个组的最后一个值,则将列除以GroupBy.transform
和GroupBy.last
创建的Series
:
df['new'] = df['2017-18'].div(df.groupby('City')['2017-18'].transform('last'))
如果不首先使用average
过滤值,然后除以Series.map
ing Series:
s = df[df['Item'] == "Nat'l average"].set_index('City')['2017-18']
df['new'] = df['2017-18'].div(df['City'].map(s))
最后用boolean indexing
过滤出行:
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
详细信息:
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