将多列乘以表中的固定值

2024-05-17 09:53:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个熊猫df,看起来像下面这样

我如何能够通过固定值来创建多个列v2、v3和v4?(我试图将这些列分别乘以.23、.43和.56

v1. v2. v3.     v4
1   1   17.70%  18.00%
2   2   16.60%  13.00%
3   3   10.60%  25.00%
4   4   29.10%  18.00%
5   5   20.50%  20.50%
6   6   1.10%   1.10%
7   7   1.10%   1.10%
8   8   1.10%   1.10%
9   9   2.40%   2.20%

我以为我能做这样的事

df = df[(df['v2'] * .23), (df['v3'] * .43), , (df['v4'] * .56)]

Tags: dfv3v2v4v1
2条回答

假设您有以下数据帧:

   v1  v2      v3      v4
0   1   1  17.70%  18.00%
1   2   2  16.60%  13.00%
2   3   3  10.60%  25.00%
3   4   4  29.10%  18.00%
4   5   5  20.50%  20.50%
5   6   6   1.10%   1.10%
6   7   7   1.10%   1.10%
7   8   8   1.10%   1.10%
8   9   9   2.40%   2.20%

第一步是“清理”数据-删除%并将其转换为浮点数:

df["v3"] = pd.to_numeric(df["v3"].str.strip("%"))
df["v4"] = pd.to_numeric(df["v4"].str.strip("%"))

然后可以将列相乘:

df["v2"] = df["v2"] * 0.23
df["v3"] = df["v3"] * 0.43
df["v4"] = df["v4"] * 0.56

print(df)

结果是:

   v1    v2      v3      v4
0   1  0.23   7.611  10.080
1   2  0.46   7.138   7.280
2   3  0.69   4.558  14.000
3   4  0.92  12.513  10.080
4   5  1.15   8.815  11.480
5   6  1.38   0.473   0.616
6   7  1.61   0.473   0.616
7   8  1.84   0.473   0.616
8   9  2.07   1.032   1.232

要将其转换回%格式,请执行以下操作:

df["v3"] = df["v3"].apply("{:.2f}%".format)
df["v4"] = df["v4"].apply("{:.2f}%".format)
print(df)

印刷品:

   v1    v2      v3      v4
0   1  0.23   7.61%  10.08%
1   2  0.46   7.14%   7.28%
2   3  0.69   4.56%  14.00%
3   4  0.92  12.51%  10.08%
4   5  1.15   8.81%  11.48%
5   6  1.38   0.47%   0.62%
6   7  1.61   0.47%   0.62%
7   8  1.84   0.47%   0.62%
8   9  2.07   1.03%   1.23%

这是您的数据帧:

import pandas as pd 

df = pd.DataFrame(
    [
        (1, 1, '17.70%', '18.00%'),
        (2, 2, '16.60%', '13.00%'),
        (3, 3, '10.60%', '25.00%'),
        (4, 4, '29.10%', '18.00%'),
        (5, 5, '20.50%', '20.50%'),
        (6, 6, '1.10%', '1.10%'),
        (7, 7, '1.10%', '1.10%'),
        (8, 8, '1.10%', '1.10%'),
        (9, 9, '2.40%', '1.40%'),
    ], 
    columns=['v1', 'v2', 'v3', 'v4']
)

现在需要一个map()来对v3v4列应用函数:

df['v2'] = df['v2'] * 0.23
df['v3'] = df['v3'].map(lambda c: f"{float(c.strip('%')) * 0.43:.2f}%")
df['v4'] = df['v4'].map(lambda c: f"{float(c.strip('%')) * 0.56:.2f}%")

输出应为:

print(df)
   v1    v2      v3      v4
0   1  0.23   7.61%  10.08%
1   2  0.46   7.14%   7.28%
2   3  0.69   4.56%  14.00%
3   4  0.92  12.51%  10.08%
4   5  1.15   8.81%  11.48%
5   6  1.38   0.47%   0.62%
6   7  1.61   0.47%   0.62%
7   8  1.84   0.47%   0.62%
8   9  2.07   1.03%   0.78%

相关问题 更多 >