python - 使用两个数据帧的值执行计算
问题描述
我有两个熊猫数据框。
数据框 1
Index_Col Col1 Col2 Col3 Col4 Col5
Row1 0.64 0.89 0.76 0.22 1.34
Row2 0.54 0.56 0.82 0.46 0.23
and so on.
DataFrame 2 对 dataframe1 中的每一列都有阈值作为一个范围。
数据框 2
Column_Name Group Min Max
col1 G1 0.5 1
col2 G1 0.1 2
col3 G2 0.3 0.9
col4 G1 0.3 1
col5 G2 0.7 2
and so on
我正在尝试计算value = ((value - Min)/(Max - Min))*100
DataFrame1 每一列中的每个值。例如,Col1 的 Row1 的值将是
((0.64-0.5)/(1-0.5))*100
。
我尝试将所有内容都转换为列表并使用多个 for 循环进行计算。但我想知道是否有更简单的方法。
解决方案
import pandas as pd
import io
# SAmple Data
df1 = pd.read_table(io.StringIO("""
Index_Col Col1 Col2 Col3 Col4 Col5
Row1 0.64 0.89 0.76 0.22 1.34
Row2 0.54 0.56 0.82 0.46 0.23
"""),delim_whitespace=True)
df2 = pd.read_table(io.StringIO("""
Column_Name Group Min Max
col1 G1 0.5 1
col2 G1 0.1 2
col3 G2 0.3 0.9
col4 G1 0.3 1
col5 G2 0.7 2
"""), delim_whitespace=True)
# Melt the wide data frame so that each cell is a row
df1m = pd.melt(df1, id_vars=["Index_Col"], var_name="Col")
# Lowercase the column name to match with df2
df1m['Column_Name'] = df1m['Col'].str.lower()
# Join the melted dataframe with the thresholds in df2
df1mj = df1m.merge(df2, left_on="Column_Name", right_on="Column_Name")
# Calculate
df1mj['new_value'] = ((df1mj['value'] - df1mj['Min'])/(df1mj['Max'] - df1mj['Min']))*100
# Use pivot to reassemble the wide dataframe
result = df1mj.pivot(index = "Index_Col", columns="Col", values="new_value")
结果:
Col Col1 Col2 Col3 Col4 Col5
Index_Col
Row1 28.0 41.578947 76.666667 -11.428571 49.230769
Row2 8.0 24.210526 86.666667 22.857143 -36.153846
推荐阅读
- python - 如何使用当前版本的 boto3 运行 AWS Glue 1.0 Python Shell 作业?
- python - 如何在 R 下为 TensorFlow 更新 r-reticulate 中的 Python 版本
- javascript - 如何将多个事件绑定到“this”?
- javascript - 手动编写 .htaccess 时,React 不会路由
- java - Java Mockito - 我如何测试这个方法?
- php - `publish_post` 上的 WordPress 函数运行两次(将值增加 2 而不是 1)
- c++ - SDL2 不创建三角形
- python - 在 python 中,我无法获得正确的产品
- scala - Scala 的 Nothing vs 部分统一
- css - 为每个自定义角色加载 CSS