python-3.x - 熊猫:如何基于另一列索引的另一列构建一列?
问题描述
我在下面展示了这个数据框。我在下面尝试了一个解决方案,但我不确定这是否是一个好的解决方案。
import pandas as pd
def creatingDataFrame():
raw_data = {'code': [1, 2, 3, 2 , 3, 3],
'Region': ['A', 'A', 'C', 'B' , 'A', 'B'],
'var-A': [2,4,6,4,6,6],
'var-B': [20, 30, 40 , 50, 10, 20],
'var-C': [3, 4 , 5, 1, 2, 3]}
df = pd.DataFrame(raw_data, columns = ['code', 'Region','var-A', 'var-B', 'var-C'])
return df
if __name__=="__main__":
df=creatingDataFrame()
df['var']=np.where(df['Region']=='A',1.0,0.0)*df['var-A']+np.where(df['Region']=='B',1.0,0.0)*df['var-B']+np.where(df['Region']=='C',1.0,0.0)*df['var-C']
我希望变量 var 假定列 'var-A'、'var-B' 或 'var-C' 的值取决于区域 'Region' 提供的区域。
结果必须是
df['var']
Out[50]:
0 2.0
1 4.0
2 5.0
3 50.0
4 6.0
5 20.0
Name: var, dtype: float64
解决方案
你可以试试lookup
df.columns=df.columns.str.split('-').str[-1]
df
Out[255]:
code Region A B C
0 1 A 2 20 3
1 2 A 4 30 4
2 3 C 6 40 5
3 2 B 4 50 1
4 3 A 6 10 2
5 3 B 6 20 3
df.lookup(df.index,df.Region)
Out[256]: array([ 2, 4, 5, 50, 6, 20], dtype=int64)
#df['var']=df.lookup(df.index,df.Region)
推荐阅读
- ruby-on-rails - Rspec:期望关联接收消息
- java - 对于 Junit 类型,方法 multiply(int, int) 未定义
- python-3.x - 在 python 中读取一个 20gb 的 csv 文件
- schema - Liquibase 无法执行混合大小写的模式(Snowflake),例如。(This_Schema)
- javascript - Phaser.Signal:监听器是 add() 的必需参数,应该是一个函数
- javascript - Javascript 将 [[ ]] 转换为 []
- html - 如何摆脱细节元素内元素下方的空间
- javascript - 从自动执行的 .js 脚本自动执行 .vbs 脚本。(没有用户干预)?
- sql - 查找所有拥有工程师和分析师的部门。使用 Join 并且不要忘记 NULL 值
- c# - c# WPF 如何使用字符串变量调用或调用按钮函数,字符串变量包含按钮名称?