python - Pandas 获取部分数据框并对值进行归一化

标签 python pandas dataframe normalization

如下两列的数据框。

我想通过给出日期来选择部分,并标准化(通过使用最小-最大方法)“权重”。

我的计划是这样的:

import pandas as pd


data = {'Date': ["2000-02-01", "2000-03-01", "2000-04-03", "2000-05-01", "2000-06-01", "2000-07-03", "2000-08-01", "2000-09-01", "2000-10-02", "2000-11-01"], 
'Weight' : [478, 26, 144, 9, 453, 24, 383, 314, 291, 286]}

df = pd.DataFrame(data)

df_1 = df.loc[df['Date'] >= "2000-04-01"]

df_1 = (df_1 - df_1.min()) / (df_1.max() - df_1.min())

print df_1

# the ideal output is two columns: 1 for Dates after "2000-04-01". 1 for their correspondent normalized "Weights". 

它给出了错误:

TypeError: unsupported operand type(s) for -: 'str' and 'str'

我怎样才能实现它?谢谢。

最佳答案

首先将值转换为日期时间,然后仅处理 Weight 列并覆盖 Weight 列:

df['Date']  = pd.to_datetime(df['Date'] )
df_1 = df.loc[df['Date'] >= "2000-04-01"]

a = (df_1['Weight'] - df_1['Weight'].min()) / (df_1['Weight'].max() - df_1['Weight'].min())

print (df_1.assign(Weight = a))
        Date    Weight
2 2000-04-03  0.304054
3 2000-05-01  0.000000
4 2000-06-01  1.000000
5 2000-07-03  0.033784
6 2000-08-01  0.842342
7 2000-09-01  0.686937
8 2000-10-02  0.635135
9 2000-11-01  0.623874

关于python - Pandas 获取部分数据框并对值进行归一化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57622156/

相关文章:

python - Numpy 中 zeros 函数的性能

java - 程序终止时终止进程运行 `exec`

python - 算法:将向量添加到列表中同时避免嵌套

python - 使用Python使用广度优先搜索算法的两个节点之间的距离

python - 从 Pandas 数据框中删除标题列

python - 在 Spyder 中再次运行代码后如何查看更新的数据框(每次运行后无需从变量资源管理器中双击)?

python - 基于针对另一列的引用表更新 Pandas Dataframe 列的问题

python - Pandas 数据框搜索字符串并返回 False 值

python - pandas dataframe 读取 csv,行末尾有/没有逗号

pandas - 基于多列在 DataFrame 中搜索值