为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

红糖糍粑 2021-04-30 11:10:00
我试图创建一组新列,这些新列将使用函数从数据框中的现有列派生。这是产生错误的示例代码,我想知道是否有比循环更好的更有效的方法来完成它import numpy as npimport pandas as pddates = 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 bfor 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约克。我只需要基于5行在excel中模拟此过程,但是将最小值和最大值作为函数的一部分进行计算将非常有用,因为实际数据中会有更多行。我是Python和Pandas的新手,非常感谢您的帮助。这些是最小和最大示例    Colorado    Texas   New Yorkmin   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 York1/31/2000   0.03     0.37    0.09      1.00      10.00     6.352/29/2000   0.4      0.26   -1.04      3.92       9.39     1.003/31/2000   0.35    -0.06   -0.75      3.53       7.63     2.374/30/2000   1.17    -1.26   -0.61     10.00       1.00     3.045/31/2000   0.46    -0.79    0.86      4.39       3.60     10.00
查看完整描述

2 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

您应该利用广播

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

然后 concat

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


查看完整回答
反对 回复 2021-05-11
  • 2 回答
  • 0 关注
  • 180 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号