我有一个看起来像这样的数据框:
1 2 3 4 Density
Mineral
Quartz 13.4 23.0 23.4 28.3 2.648
Plagioclase 5.2 8.2 8.5 11.7 2.620
K-feldspar 2.3 2.4 2.6 3.1 2.750
我需要做的是根据行上的条件计算新行:
期望的输出
1 2 3 4 Density
Mineral
Quartz 13.4 23.0 23.4 28.3 2.648
Plagioclase 5.2 8.2 8.5 11.7 2.620
K-feldspar 2.3 2.4 2.6 3.1 2.750
Quartz_v 5.06 8.69 8.84 10.69 2.648
Plagioclase_v ...
所以我基本上需要执行以下步骤:
1)定义新行,例如 Quartz_v
2),然后执行以下计算 Quartz_v = Quartz 的每个列值除以 Quartz_v < / strong>
我已经将数据作为密度和矿物的两个数据框加载,并合并了它们,因此每种矿物在其前面将具有正确的密度。
答案 0 :(得分:3)
使用
DataFrame.div
(轴= 0)执行除法,rename
重命名索引,然后append
将结果连接到原始文件(您也可以使用pd.concat
)。
d = df['Density']
result = df.append(df.div(d, axis=0).assign(Density=d).rename(lambda x: x+'_v'))
result
1 2 3 4 Density
Mineral
Quartz 13.400000 23.000000 23.400000 28.300000 2.648
Plagioclase 5.200000 8.200000 8.500000 11.700000 2.620
K-feldspar 2.300000 2.400000 2.600000 3.100000 2.750
Quartz_v 5.060423 8.685801 8.836858 10.687311 2.648
Plagioclase_v 1.984733 3.129771 3.244275 4.465649 2.620
K-feldspar_v 0.836364 0.872727 0.945455 1.127273 2.750