如何在多个 DataFrame 上分布应用 df.min() 和 df.max()
How to apply df.min() and df.max() distributively over many DataFrames
我有一个 DataFrame 列表,所有列都具有相同的列,我想将所有列中的值标准化为 [0, 1],同时保持 DataFrame 之间值的相对比例。
对于单个 DataFrame,我可以这样做:
df = (df - df.min()) / (df.max() - df.min())
但是,我如何获取所有 DataFrame 中每一列的最小值和最大值,然后将与上述相同的公式应用于每个单独的 DataFrame,使用每一列的集体最小值和最大值?
这是 2 个 DataFrame 的示例列表,其中每个 DataFrame 都被单独标准化:
import numpy as np
import pandas as pd
dfs = []
for i in range(2):
data = np.random.rand(3, 3)
df = pd.DataFrame(data, columns=["one", "two", "three"])
dfs.append(df)
print(df)
for i in range(2):
dfs[i] = (dfs[i] - dfs[i].min()) / (dfs[i].max() - dfs[i].min())
print(dfs[i])
我会concat
把dfs变成一个df,用multiindex计算
df=pd.concat(dfs,keys=range(len(dfs)))
df =df.groupby(level=0).apply(lambda x : (x - x.min()) / (x.max() - x.min()))
如果你想看第一个df
df.loc[0]
Out[20]:
one two three
0 1.000000 0.576142 0.000000
1 0.559371 0.000000 1.000000
2 0.000000 1.000000 0.594986
我有一个 DataFrame 列表,所有列都具有相同的列,我想将所有列中的值标准化为 [0, 1],同时保持 DataFrame 之间值的相对比例。
对于单个 DataFrame,我可以这样做:
df = (df - df.min()) / (df.max() - df.min())
但是,我如何获取所有 DataFrame 中每一列的最小值和最大值,然后将与上述相同的公式应用于每个单独的 DataFrame,使用每一列的集体最小值和最大值?
这是 2 个 DataFrame 的示例列表,其中每个 DataFrame 都被单独标准化:
import numpy as np
import pandas as pd
dfs = []
for i in range(2):
data = np.random.rand(3, 3)
df = pd.DataFrame(data, columns=["one", "two", "three"])
dfs.append(df)
print(df)
for i in range(2):
dfs[i] = (dfs[i] - dfs[i].min()) / (dfs[i].max() - dfs[i].min())
print(dfs[i])
我会concat
把dfs变成一个df,用multiindex计算
df=pd.concat(dfs,keys=range(len(dfs)))
df =df.groupby(level=0).apply(lambda x : (x - x.min()) / (x.max() - x.min()))
如果你想看第一个df
df.loc[0]
Out[20]:
one two three
0 1.000000 0.576142 0.000000
1 0.559371 0.000000 1.000000
2 0.000000 1.000000 0.594986