我试图创建一组新列,这些新列将使用函数从数据框中的现有列派生。这是产生错误的示例代码,我想知道是否有比循环更好的更有效的方法来完成它
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约克。我只需要基于5行在excel中模拟此过程,但是将最小值和最大值作为函数的一部分进行计算将非常有用,因为实际数据中会有更多行。我是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
红糖糍粑
烙印99
随时随地看视频慕课网APP
相关分类