首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据其包含的值在列之间进行操作。

根据其包含的值在列之间进行操作。
EN

Stack Overflow用户
提问于 2022-10-27 13:36:40
回答 2查看 38关注 0票数 0

我有一个像这样的Dataframe:

df_1:

代码语言:javascript
复制
    Phase_1  Phase_2   Phase_3
0      8       4        2
1      4       6        3
2      8       8        3
3      10      5        8
...

我想添加一个名为"Coeff“的列来计算(Phase_max - Phase_min) / Phase_max

对于第一行: Coeff= (Phase_1 - Phase_3)/ Phase_1 = (8-2)/8 = 0.75

预期产出:

df_1

代码语言:javascript
复制
    Phase_1  Phase_2   Phase_3   Coeff
0      8       4        2       0.75
1      4       6        3       0.5
2      8       8        3       0.625
3      10      5        8       0.5

在不使用循环的情况下计算这个值的最佳方法是什么?我想在大型数据集上应用它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-27 13:39:00

这里有一种方法

代码语言:javascript
复制
# list the columns, you like to use in calculations
cols=['Phase_1', 'Phase_2', 'Phase_3']

# using max and min across the axis to calculate, for the defined columns

df['coeff']=(df[cols].max(axis=1).sub(df[cols].min(axis=1))).div(df[cols].max(axis=1))
df

小性能优化( Yevhen信贷)

代码语言:javascript
复制
df['coeff']= 1 - (df[cols].min(axis=1).div(df[cols].max(axis=1)))

df
代码语言:javascript
复制
    Phase_1     Phase_2     Phase_3     coeff
0         8           4           2     0.750
1         4           6           3     0.500
2         8           8           3     0.625
3         10          5           8     0.500
票数 1
EN

Stack Overflow用户

发布于 2022-10-27 13:43:31

根据OP specification

i只想要Phase_1、Phase_2和Phase_3之间的最大值或最小值,而不是其他列。

以下内容将完成这项工作

代码语言:javascript
复制
columns = ['Phase_1', 'Phase_2', 'Phase_3']
max_phase = df[columns].max(axis = 1)
min_phase = df[columns].min(axis = 1)
df['Coeff'] = (max_phase - min_phase) / max_phase

# or

max_phase = df[['Phase_1', 'Phase_2', 'Phase_3']].max(axis = 1)
min_phase = df[['Phase_1', 'Phase_2', 'Phase_3']].min(axis = 1)
df['Coeff'] = (max_phase - min_phase) / max_phase

# or

df['Coeff'] = (df[['Phase_1', 'Phase_2', 'Phase_3']].max(axis = 1) - df[['Phase_1', 'Phase_2', 'Phase_3']].min(axis = 1)) / df[['Phase_1', 'Phase_2', 'Phase_3']].max(axis = 1)

[Out]:

   Phase_1  Phase_2  Phase_3  Coeff
0        8        4        2  0.750
1        4        6        3  0.500
2        8        8        3  0.625
3       10        5        8  0.500

另一种选择是使用numpy内置模块,如下所示

代码语言:javascript
复制
columns = ['Phase_1', 'Phase_2', 'Phase_3']
max_phase = np.max(df[columns], axis = 1)
min_phase = np.min(df[columns], axis = 1)
df['Coeff'] = (max_phase - min_phase) / max_phase

# or

max_phase = np.max(df[['Phase_1', 'Phase_2', 'Phase_3']], axis = 1)
min_phase = np.min(df[['Phase_1', 'Phase_2', 'Phase_3']], axis = 1)
df['Coeff'] = (max_phase - min_phase) / max_phase

# or

df['Coeff'] = (np.max(df[['Phase_1', 'Phase_2', 'Phase_3']], axis = 1) - np.min(df[['Phase_1', 'Phase_2', 'Phase_3']], axis = 1)) / np.max(df[['Phase_1', 'Phase_2', 'Phase_3']], axis = 1)

[Out]:

   Phase_1  Phase_2  Phase_3  Coeff
0        8        4        2  0.750
1        4        6        3  0.500
2        8        8        3  0.625
3       10        5        8  0.500
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74223008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档