如何处理 Pandas 中的 2 列并使用新列名创建新数据框

3kstc

我想计算my_list. 公式在函数中def covariance_formula(...):

我的代码如下:

#!/usr/bin/python3

import pandas as pd
import numpy as np

my_list = ['A', 'B', 'C', 'D', 'E']

def create_df():
    return pd.DataFrame(np.random.randint(0,100,size=(5, 5)).astype(float), columns=my_list)


def iterate_list(df):
    for i in range(len(my_list)):
        for j in range(i + 1, len(my_list)):
            column_one = my_list[i]
            column_two = my_list[j]
            col_name = column_one + " vs." + column_two

            column_1_value = df[df.columns[df.columns.str.startswith(column_one)]]
            column_2_value = df[df.columns[df.columns.str.startswith(column_two)]]
            column_1_mean = df[df.columns[df.columns.str.startswith(column_one)]].mean(axis=0)
            column_2_mean = df[df.columns[df.columns.str.startswith(column_two)]].mean(axis=0)
            df2[col_name] = covariance_formula(column_1_value, column_2_value, column_1_mean, column_2_mean)

    return df2


def covariance_formula(a, b, mean_a, mean_b):
    covar = (a - mean_a) * (b - mean_b)
    return covar


def main():
    df = create_df()
    # print(df)               ## see OUTPUT A 
    df2 = iterate_list(df)    ## <<< THIS IS WHERE I AM HAVING MY PROBLEM
    # print(df2)              ## see EXPECTED OUTPUT B
    print(df2)


if __name__ == "__main__":
    main()

问题:

如何创建一个新的 df df2,它的输出为EXPECTED OUTPUT B有没有更快的方法?

当前问题:

我目前面临的问题是我似乎无法摆脱这个:

NameError: 名称 'df2' 未定义

我尝试过的事情:

输出 A

      A     B     C     D     E
0  87.0  92.0  66.0   8.0  67.0
1  84.0  18.0   9.0  80.0  41.0
2  38.0  24.0  53.0  25.0  14.0
3  87.0  25.0  19.0   5.0   0.0
4  91.0  69.0  55.0  14.0  90.0

预期输出 B

    A vs.B  A vs.C  A vs.D  A vs.E  B vs.C   B vs.D  B vs.E  C vs.D C vs.E  D vs.E
0    445.4   245.8  -176.6   236.2  1187.8   -853.8  1141.4  -471.0  629.8  -452.6
1   -182.2  -207.2   353.8    -9.2   866.6  -1479.4    38.6 -1683.0   44.0   -75.0
2    851.0  -496.4    55.2  1119.0  -272.2     30.2   613.4   -17.6 -357.8    39.8
3   -197.8  -205.4  -205.4  -407.0   440.8    440.8   873.4   458.0  907.4   907.4 
4    318.2   198.6  -168.6   647.4   341.6   -290.2  1113.8  -181.0  695.0  -590.2
斯蒂芬·劳赫

如果你用你能做到这一点更容易itertools.combinations()字典理解构建喜欢你的列:

代码:

def build_covars(covar_df):
    columns = {i + " vs." + j: covariance_formula(covar_df[i], covar_df[j])
               for i, j in it.combinations(covar_df.columns, 2)}
    return pd.concat(columns, axis=1)

测试代码:

import itertools as it
import pandas as pd

def build_covars(covar_df):
    columns = {i + " vs." + j: covariance_formula(covar_df[i], covar_df[j])
               for i, j in it.combinations(covar_df.columns, 2)}
    return pd.concat(columns, axis=1)

def covariance_formula(a, b):
    return (a - a.mean()) * (b - b.mean())

my_list = ['A', 'B', 'C', 'D', 'E']

def create_df():
    return pd.DataFrame(
        np.random.randint(0, 100, size=(5, 5)).astype(float),
        columns=my_list)

df = create_df()
print(build_covars(df))

结果:

    A vs.B  A vs.C  A vs.D   A vs.E  B vs.C  B vs.D  B vs.E  C vs.D  C vs.E  \
0    52.48   49.92  -43.52   323.84   63.96  -55.76  414.92  -53.04  394.68   
1   127.68  123.12  184.68    18.24  120.96  181.44   17.92  174.96   17.28   
2   175.48  124.12  -17.12    98.44   47.56   -6.56   37.72   -4.64   26.68   
3    10.08 -127.68  -57.12  -280.56  -18.24   -8.16  -40.08  103.36  507.68   
4  1370.88  437.92   85.68  1113.84  264.96   51.84  673.92   16.56  215.28   

   D vs.E  
0 -344.08  
1   25.92  
2   -3.68  
3  227.12  
4   42.12 

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用数据框中的2列提取数据并使用Python创建新列?

来自分类Dev

如何遍历 R 数据框中的列并在每次迭代中使用列名创建新数据框?

来自分类Dev

如何从Pandas数据框中的现有列创建新列

来自分类Dev

如何在不同的输入参数中应用相同的函数在pandas数据框中创建新列?

来自分类Dev

如何仅通过列表理解在pandas数据框中创建新列?

来自分类Dev

如何汇总日内时间戳并在pandas数据框Python中创建新列

来自分类Dev

如何使用数据框中的2列中的值使用字典分配新列

来自分类Dev

如何根据基于数据框中列名称的字典创建新列

来自分类Dev

从Pandas数据框中的其他列创建新列

来自分类Dev

如何检查date1是否小于date2并在pandas数据框中的新列中分配值

来自分类Dev

在R中,处理错误:ggplot2不知道如何处理数值类的数据

来自分类Dev

在R中,处理错误:ggplot2不知道如何处理数值类的数据

来自分类Dev

如何处理DataGridView框中的数据?

来自分类Dev

str。包含在pandas数据框中创建新列

来自分类Dev

基于 if/elif/and 函数在 Pandas 数据框中创建新列

来自分类Dev

使用针对另一列的 if 语句在 Pandas 数据框中创建新列

来自分类Dev

Python Pandas数据透视表如何处理'\ xc2 \ xa0'?

来自分类Dev

如何处理 pandas.read_csv 中的元数据行?

来自分类Dev

如何使用 Pandas.assign 从 Pandas 数据框索引创建一个新列?

来自分类Dev

使用 *args 编写函数在 Pandas 数据框中创建一个新列

来自分类Dev

在 Angular 2 中,如何处理记录在 jquery 中并为 jquery 编写的使用插件?

来自分类Dev

如何处理熊猫数据框中的列?

来自分类Dev

如何解析pandas数据框中的JSON列,并将新数据框连接到原始数据框中?

来自分类Dev

如何使用Pandas在CSV文件中创建新列,并根据这些列中的值添加数据

来自分类Dev

如何处理从状态中删除的数据

来自分类Dev

如何处理stan中的缺失数据?

来自分类Dev

如何处理(汇总)R中的数据?

来自分类Dev

如何处理JSON中的缺失数据

来自分类Dev

如何处理对象集合中的数据?

Related 相关文章

  1. 1

    如何使用数据框中的2列提取数据并使用Python创建新列?

  2. 2

    如何遍历 R 数据框中的列并在每次迭代中使用列名创建新数据框?

  3. 3

    如何从Pandas数据框中的现有列创建新列

  4. 4

    如何在不同的输入参数中应用相同的函数在pandas数据框中创建新列?

  5. 5

    如何仅通过列表理解在pandas数据框中创建新列?

  6. 6

    如何汇总日内时间戳并在pandas数据框Python中创建新列

  7. 7

    如何使用数据框中的2列中的值使用字典分配新列

  8. 8

    如何根据基于数据框中列名称的字典创建新列

  9. 9

    从Pandas数据框中的其他列创建新列

  10. 10

    如何检查date1是否小于date2并在pandas数据框中的新列中分配值

  11. 11

    在R中,处理错误:ggplot2不知道如何处理数值类的数据

  12. 12

    在R中,处理错误:ggplot2不知道如何处理数值类的数据

  13. 13

    如何处理DataGridView框中的数据?

  14. 14

    str。包含在pandas数据框中创建新列

  15. 15

    基于 if/elif/and 函数在 Pandas 数据框中创建新列

  16. 16

    使用针对另一列的 if 语句在 Pandas 数据框中创建新列

  17. 17

    Python Pandas数据透视表如何处理'\ xc2 \ xa0'?

  18. 18

    如何处理 pandas.read_csv 中的元数据行?

  19. 19

    如何使用 Pandas.assign 从 Pandas 数据框索引创建一个新列?

  20. 20

    使用 *args 编写函数在 Pandas 数据框中创建一个新列

  21. 21

    在 Angular 2 中,如何处理记录在 jquery 中并为 jquery 编写的使用插件?

  22. 22

    如何处理熊猫数据框中的列?

  23. 23

    如何解析pandas数据框中的JSON列,并将新数据框连接到原始数据框中?

  24. 24

    如何使用Pandas在CSV文件中创建新列,并根据这些列中的值添加数据

  25. 25

    如何处理从状态中删除的数据

  26. 26

    如何处理stan中的缺失数据?

  27. 27

    如何处理(汇总)R中的数据?

  28. 28

    如何处理JSON中的缺失数据

  29. 29

    如何处理对象集合中的数据?

热门标签

归档