创建一些新的列以对Pandas

创建一些新的列以对Pandas

我需要基于外部表vprices添加新列“ price”。

我尝试按示例中的方法添加它,但是由于在括号df [“ vol-type”]中是一个Series变量,而不是该序列的nth值,因此出现了错误,这是我需要的。

如何重写以获取使用每一行的值填充的新列“ real_size”?

virtsizes = {
  "type1": { "gb": 1.2, "xxx": 0, "yyy": 30 },
  "type2": { "gb": 1.5, "xxx": 2, "yyy": 20  },
  "type3": { "gb": 2.3, "xxx": 0.1, "yyy": 10  },
}
df = pd.read_csv(StringIO(src),names=["vol-id","size","vol-type"])

df["real_size"] = df["size"] * ( virtsizes[df["vol-type"]]["gb"]


谢谢!

最佳答案

map选择的df1行中使用loc

virtsizes = {
  "type1": { "gb": 1.2, "xxx": 0, "yyy": 30 },
  "type2": { "gb": 1.5, "xxx": 2, "yyy": 20  },
  "type3": { "gb": 2.3, "xxx": 0.1, "yyy": 10  },
}
df1 = pd.DataFrame(virtsizes)
print (df1)
     type1  type2  type3
gb     1.2    1.5    2.3
xxx    0.0    2.0    0.1
yyy   30.0   20.0   10.0

df = pd.DataFrame({'vol-type':['type1','type2']})

df["real_size"] = df["vol-type"].map(df1.loc['gb'])
print (df)
  vol-type  real_size
0    type1        1.2
1    type2        1.5


另一种解决方案是在gb中提取dict comprehension

virtsizes = {
  "type1": { "gb": 1.2, "xxx": 0, "yyy": 30 },
  "type2": { "gb": 1.5, "xxx": 2, "yyy": 20  },
  "type3": { "gb": 2.3, "xxx": 0.1, "yyy": 10  },
}
d = {k:v['gb'] for k,v in virtsizes.items()}
print (d)
{'type2': 1.5, 'type1': 1.2, 'type3': 2.3}

df = pd.DataFrame({'vol-type':['type1','type2']})
df["real_size"] = df["vol-type"].map(d)
print (df)
  vol-type  real_size
0    type1        1.2
1    type2        1.5

关于python - 创建一些新的列以对Pandas DataFrame进行逻辑处理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48641924/

10-13 01:22