gpt4 book ai didi

python - 将列的比例转换为 1 到 10 的范围

转载 作者:太空宇宙 更新时间:2023-11-04 00:13:58 25 4
gpt4 key购买 nike

我正在尝试创建一组新列,这些列将使用函数从数据框中的现有列派生。这是产生错误的示例代码,我想知道是否有比循环更好更有效的方法来完成它

import numpy as np
import pandas as pd

dates = pd.date_range('1/1/2000', periods=100, freq='M')
long_df = pd.DataFrame(np.random.randn(100, 4),index=dates, columns=['Colorado', 'Texas', 'New York', 'Ohio'])
mylist=['Colorado', 'Texas', 'New York', 'Ohio']

def trnsfrm_1_10 (a, b):
b = (a-np.min(a))/(np.max(a)-np.min(a))*9+1
return b

for a in mylist:
b=a+"_T"
long_df[b] = long_df.apply(lambda row: trnsfrm_1_10(row[a], row[b]), axis=1)

为了澄清上述问题,这里是具有输入列(科罗拉多州、德克萨斯州、纽约州)和输出变量(T_Colorado、T_Texas、T_New York)的 DataFrame 示例。让我们假设,如果对于每个输入变量,下面是每列的最小值和最大值,然后通过应用等式:b = (a-min)/(max-min)*9+1 到每列,输出变量是 T_Colorado T_Texas T_New约克。我不得不在 excel 中仅基于 5 行来模拟此过程,但是将最小值和最大值计算为函数的一部分会很棒,因为我在实际数据中会有更多的行。我对 Python 和 Pandas 比较陌生,非常感谢您的帮助。

这些是示例最小值和最大值

    Colorado    Texas   New York
min 0.03 -1.26 -1.04
max 1.17 0.37 0.86

这是一个DataFrame的例子

Index     Colorado  Texas   New York T_Colorado T_Texas  T_New York
1/31/2000 0.03 0.37 0.09 1.00 10.00 6.35
2/29/2000 0.4 0.26 -1.04 3.92 9.39 1.00
3/31/2000 0.35 -0.06 -0.75 3.53 7.63 2.37
4/30/2000 1.17 -1.26 -0.61 10.00 1.00 3.04
5/31/2000 0.46 -0.79 0.86 4.39 3.60 10.00

最佳答案

IIUC,你应该利用广播

long_df2= (long_df - long_df.min())/(long_df.max() - long_df.min()) * 9 + 1

然后连接

pd.concat([long_df, long_df2.add_suffix('_T')], 1)

关于python - 将列的比例转换为 1 到 10 的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51528729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com