我有以下类型的数据框:
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 之间。我只想选择某些列,但不是按名称而是按位置。想象一下,我想改变 200 并且不想写所有这些。
我试过的代码是:
df /= df.max()
但它使所有列都在 (0,1) 之间,而不仅仅是我想要的列。而且我找不到只选择其中一部分的方法。
2) 我还想重新缩放列,但不是在它们之间,我的意思是我想只为牛奶制作一个秤,另一个只为冷冻的,例如。
我想重新缩放每一个,例如在 100 之间划分,因为它们太大了,但也许对于另一列我想在 10 之间划分它,因为 100 太多了。我该怎么做?
对于 1,您可以选择这样的列列表:
df[['Milk','Frozen','Grocery']]
因此,要仅重新缩放这三列,请使用:
df[['Milk','Frozen','Grocery']] -= df[['Milk','Frozen','Grocery']].min()
df[['Milk','Frozen','Grocery']] /= df[['Milk','Frozen','Grocery']].max()
如果这是您的第二个问题的意思,则此方法已经相互独立地缩放您的列。
编辑:
如果您想选择数据框的前 200 列,您可以使用 df.columns
,它会为您提供列列表:
df[df.columns[:200]] -= df[df.columns[:200]].min()
df[df.columns[:200]] /= df[df.columns[:200]].max()
dataframe 上 pandas 的 max
方法返回每列最大值的列表。因此,如果您使用上述代码,每列中的最大值都将完全等于 1。
如果您不想将它除以每列的最大值,而是第一列除以 n1
,第二列除以 n2
,您可以使用相同的表示法:
df[df.columns[:4]] /= [n1,n2,n3,n4]
我是一名优秀的程序员,十分优秀!