Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将所有列除以表中的每列_Python_Pandas - Fatal编程技术网

Python 将所有列除以表中的每列

Python 将所有列除以表中的每列,python,pandas,Python,Pandas,我有一个类似于1的数据框,我正在尝试创建一个新的数据框2,它由上述数据框的每一列的比率组成 我尝试了下面提到的逻辑 df_new = pd.concat([df[df.columns.difference([col])].div(df[col], axis=0)\ .add_suffix('/R') for col in df.columns], axis=1) 输出为: B/R C/R D/R A/R C/R

我有一个类似于1的数据框,我正在尝试创建一个新的数据框2,它由上述数据框的每一列的比率组成

我尝试了下面提到的逻辑

df_new = pd.concat([df[df.columns.difference([col])].div(df[col], axis=0)\
                    .add_suffix('/R') for col in df.columns], axis=1)
输出为:

    B/R     C/R     D/R     A/R     C/R     D/R     A/R     B/R     D/R     A/R     B/R    C/R
0   0.46    1.16    0.78    2.16    2.50    1.69    0.86    0.40    0.68    1.28    0.59    1.48
1   1.05    1.25    1.64    0.95    1.19    1.55    0.80    0.84    1.30    0.61    0.64    0.77
2   1.56    2.78    2.78    0.64    1.79    1.79    0.36    0.56    1.00    0.36    0.56    1.00
3   0.54    2.23    0.35    1.86    4.14    0.64    0.45    0.24    0.16    2.89    1.56    6.44
然而,我在这里面临两个问题。一个是我得到了A/B和B/A,它们都不是必需的,而且还增加了列的数量。是否有办法只获取输出a/B并消除/限制B/a


第二个问题是使用add-suffix方法对列进行命名,该方法不表示用which除以which。是否有一种方法可以为a列除以B列创建类似a/B的列名。

在列表理解中使用带有divide列的组合:

df = pd.DataFrame({
        'A':[5,3,6,9,2,4],
         'B':[4,5,4,5,5,4],
         'C':[7,8,9,4,2,3],
         'D':[1,3,5,7,1,8],
})

from  itertools import combinations

L = {f'{a}/{b}': df[a].div(df[b]) for a, b in combinations(df.columns, 2)}

df = pd.concat(L, axis=1)
print (df)
    A/B       A/C       A/D       B/C       B/D       C/D
0  1.25  0.714286  5.000000  0.571429  4.000000  7.000000
1  0.60  0.375000  1.000000  0.625000  1.666667  2.666667
2  1.50  0.666667  1.200000  0.444444  0.800000  1.800000
3  1.80  2.250000  1.285714  1.250000  0.714286  0.571429
4  0.40  1.000000  2.000000  2.500000  5.000000  2.000000
5  1.00  1.333333  0.500000  1.333333  0.500000  0.375000