Python 如何编写熊猫中每次迭代后生成的新列

Python 如何编写熊猫中每次迭代后生成的新列,python,pandas,Python,Pandas,我有38列,我正在一个接一个地预处理。每列的结果必须写入csv文件。每次我运行代码时,只有最后处理的列是用csv编写的。如何使用pandas将每个列逐个添加到输出文件中 这是我的密码: def最小值和最大值(我的数据1): min_max(my_data1)我认为您不需要循环,最好使用pandas函数和and: 样本: np.random.seed(100) my_data1 = pd.DataFrame(np.random.randint(10, size=(3,5))) print (my_

我有38列,我正在一个接一个地预处理。每列的结果必须写入csv文件。每次我运行代码时,只有最后处理的列是用csv编写的。如何使用pandas将每个列逐个添加到输出文件中

这是我的密码:

def最小值和最大值(我的数据1):


min_max(my_data1)

我认为您不需要循环,最好使用pandas函数和and:

样本

np.random.seed(100)
my_data1 = pd.DataFrame(np.random.randint(10, size=(3,5)))
print (my_data1)
   0  1  2  3  4
0  8  8  3  7  7
1  0  4  2  5  2
2  2  2  1  0  8
In [334]: %timeit min_max(my_data1)
18.8 ms ± 257 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [335]: %timeit my_data1.sub(my_data1.min(axis=0)).div(my_data1.max(axis=0).sub(my_data1.min(axis=0)))
2.2 ms ± 39.7 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

我的解决方案是:

a = my_data1.sub(my_data1.min(axis=0))
b = my_data1.max(axis=0).sub(my_data1.min(axis=0))

df = a.div(b)
print (df)
      0         1    2         3         4
0  1.00  1.000000  1.0  1.000000  0.833333
1  0.00  0.333333  0.5  0.714286  0.000000
2  0.25  0.000000  0.0  0.000000  1.000000
但如果真的需要循环慢的解决方案,请将值附加到
列表中,最后:

计时

np.random.seed(100)
my_data1 = pd.DataFrame(np.random.randint(10, size=(3,5)))
print (my_data1)
   0  1  2  3  4
0  8  8  3  7  7
1  0  4  2  5  2
2  2  2  1  0  8
In [334]: %timeit min_max(my_data1)
18.8 ms ± 257 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [335]: %timeit my_data1.sub(my_data1.min(axis=0)).div(my_data1.max(axis=0).sub(my_data1.min(axis=0)))
2.2 ms ± 39.7 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)


谢谢这段代码使我的实际代码非常容易。
In [334]: %timeit min_max(my_data1)
18.8 ms ± 257 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [335]: %timeit my_data1.sub(my_data1.min(axis=0)).div(my_data1.max(axis=0).sub(my_data1.min(axis=0)))
2.2 ms ± 39.7 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
np.random.seed(100)
my_data1 = pd.DataFrame(np.random.randint(10, size=(1000,38)))
print (my_data1.head())

def min_max(my_data1):
    L = []
    for count in range (len(my_data1.columns)):
        min_col= my_data1[count].min()
        max_col= my_data1[count].max()
        value= (my_data1[count]-min_col) / (max_col-min_col)
        L.append(value)
    return pd.concat(L, axis=1)

df1 = min_max(my_data1)
print (df1.head())

df2 = my_data1.sub(my_data1.min(axis=0)).div(my_data1.max(axis=0).sub(my_data1.min(axis=0)))
print (df2.head())