Python 3.x 在熊猫数据框架中,如何使一列作用于所有其他列?

Python 3.x 在熊猫数据框架中,如何使一列作用于所有其他列?,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,考虑以下小数据帧: import pandas as pd value1 = [15, 20, 50, 70] value2 = [15, 80, 45, 30] base = [175, 150, 200, 125] df = pd.DataFrame({"val1": value1, "val2": value2, "base": base}) df val1 val2 base 0 15

考虑以下小数据帧:

import pandas as pd
 
value1 = [15, 20, 50, 70]
value2 = [15, 80, 45, 30]
base = [175, 150, 200, 125]

df = pd.DataFrame({"val1": value1, "val2": value2, "base": base})

df
    val1    val2    base
0   15      15      175
1   20      80      150
2   50      45      200
3   70      30      125
实际上,有更多的行和更多的列

我想将
val***
列中给出的数字表示为相应
基数的百分比(在同一行中);例如,
70
(最后一个
val1
)应该变成
(70/125)*100
,(这是
56
),或者
30
(最后一个
val2
)应该变成
(30/125)*100
(这是
28
);每一个数字都是如此。
我确信解决方案在于正确使用
assign
apply
lambda
,但是我找不到怎么做…

我们可以
过滤
val
类列,然后将这些列沿
轴=0
除以
base
列,然后乘以
100
计算百分比

df.filter(like='val').div(df['base'], axis=0).mul(100).add_suffix('%')


我们可以
过滤
val
列,然后沿
轴=0
将这些列除以
base
列,然后乘以
100
计算百分比

df.filter(like='val').div(df['base'], axis=0).mul(100).add_suffix('%')


您可以发布预期的输出吗?您可以发布预期的输出吗?添加问题:如果列的名称仅为“1”、“2”、“2”等等(名称中没有公共文本“val”),该怎么办。仍然可以“筛选”?在这种情况下,我们只需传递需要选择的列名列表。例如,您可以这样做
df[['1','2','3']].div(df['base'],axis=0).mul(100).添加后缀('%')
添加问题:如果列仅命名为“1”,“2”,“2”,等等(名称中没有公共文本“val”),该怎么办。仍然可以“筛选”?在这种情况下,我们只需传递需要选择的列名列表。例如,您可以这样做
df[['1','2','3']].div(df['base'],axis=0).mul(100).添加后缀('%')