从 Pandas Python 数据帧重新缩放到 (0,1) 某些列
Rescaling to (0,1) certain columns from Pandas Python dataframe
我有以下类型的数据框:
Channel Region Fresh Milk Grocery Frozen Detergents_Paper Delicassen
0 2 3 12669 9656 7561 214 2674 1338
1 2 3 7057 9810 9568 1762 3293 1776
2 2 3 6353 8808 7684 2405 3516 7844
3 1 3 13265 1196 4221 6404 507 1788
4 2 3 22615 5410 7198 3915 1777 5185
我想做两件事:
1) 能够仅重新缩放某些列而不是所有列,以便它们在 0,1 之间。我只想 select 某些列,但不是按名称而是按位置。想象一下,我想改变 200 并且不想写所有这些。
我试过的代码是:
df /= df.max()
但它使所有列都在 (0,1) 之间,而不仅仅是我想要的列。而且我找不到只 select 其中一部分的方法。
2) 我还想重新缩放列,但不是在它们之间,我的意思是我想只为牛奶制作一个秤,另一个只为冷冻的,例如。
我想重新缩放每一个,例如在 100 之间划分,因为它们太大了,但也许对于另一列我想在 10 之间划分,因为 100 太多了。我该怎么做?
对于 1,您可以 select 像这样的列列表:
df[['Milk','Frozen','Grocery']]
因此,要仅重新缩放这三列,请使用:
df[['Milk','Frozen','Grocery']] -= df[['Milk','Frozen','Grocery']].min()
df[['Milk','Frozen','Grocery']] /= df[['Milk','Frozen','Grocery']].max()
如果这是你的第二个问题的意思,这个方法已经独立地缩放你的列。
编辑:
如果你想 select 数据框的前 200 列,你可以使用 df.columns
它给你列的列表:
df[df.columns[:200]] -= df[df.columns[:200]].min()
df[df.columns[:200]] /= df[df.columns[:200]].max()
数据帧 pandas 上的 max
方法 returns 每列最大值的列表。因此,如果您使用上面的代码,则每列中的最大值都将完全等于 1。
如果您不想将它除以每列的最大值,而是第一列除以 n1
,第二列除以 n2
,您可以使用相同的表示法:
df[df.columns[:4]] /= [n1,n2,n3,n4]
这是一个针对单个列的解决方案,它实际上在 0,1 范围内重新缩放:
a = [5,15,25,35,45,50,55,65,75,85,95]
df = pd.DataFrame(data=a, columns=['a'])
df['rescale'] = (df['a'] - min(df['a'])) / (max(df['a']) - min(df['a']))
也是一个numpy方法:
import numpy as np
rescale = (a - np.min(a))/np.ptp(a)
我有以下类型的数据框:
Channel Region Fresh Milk Grocery Frozen Detergents_Paper Delicassen
0 2 3 12669 9656 7561 214 2674 1338
1 2 3 7057 9810 9568 1762 3293 1776
2 2 3 6353 8808 7684 2405 3516 7844
3 1 3 13265 1196 4221 6404 507 1788
4 2 3 22615 5410 7198 3915 1777 5185
我想做两件事:
1) 能够仅重新缩放某些列而不是所有列,以便它们在 0,1 之间。我只想 select 某些列,但不是按名称而是按位置。想象一下,我想改变 200 并且不想写所有这些。
我试过的代码是:
df /= df.max()
但它使所有列都在 (0,1) 之间,而不仅仅是我想要的列。而且我找不到只 select 其中一部分的方法。
2) 我还想重新缩放列,但不是在它们之间,我的意思是我想只为牛奶制作一个秤,另一个只为冷冻的,例如。
我想重新缩放每一个,例如在 100 之间划分,因为它们太大了,但也许对于另一列我想在 10 之间划分,因为 100 太多了。我该怎么做?
对于 1,您可以 select 像这样的列列表:
df[['Milk','Frozen','Grocery']]
因此,要仅重新缩放这三列,请使用:
df[['Milk','Frozen','Grocery']] -= df[['Milk','Frozen','Grocery']].min()
df[['Milk','Frozen','Grocery']] /= df[['Milk','Frozen','Grocery']].max()
如果这是你的第二个问题的意思,这个方法已经独立地缩放你的列。
编辑:
如果你想 select 数据框的前 200 列,你可以使用 df.columns
它给你列的列表:
df[df.columns[:200]] -= df[df.columns[:200]].min()
df[df.columns[:200]] /= df[df.columns[:200]].max()
数据帧 pandas 上的 max
方法 returns 每列最大值的列表。因此,如果您使用上面的代码,则每列中的最大值都将完全等于 1。
如果您不想将它除以每列的最大值,而是第一列除以 n1
,第二列除以 n2
,您可以使用相同的表示法:
df[df.columns[:4]] /= [n1,n2,n3,n4]
这是一个针对单个列的解决方案,它实际上在 0,1 范围内重新缩放:
a = [5,15,25,35,45,50,55,65,75,85,95]
df = pd.DataFrame(data=a, columns=['a'])
df['rescale'] = (df['a'] - min(df['a'])) / (max(df['a']) - min(df['a']))
也是一个numpy方法:
import numpy as np
rescale = (a - np.min(a))/np.ptp(a)