Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.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 DataFrame:在列中添加相同符号值的最大值和最小值_Python_Pandas_Dataframe - Fatal编程技术网

Python DataFrame:在列中添加相同符号值的最大值和最小值

Python DataFrame:在列中添加相同符号值的最大值和最小值,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个熊猫数据框。数据帧的值是三种计算模型(RSA1、RSA 2、RSA 3)的结果。每个模型的组和案例相同。Fx、Fy、Fz列的值可以是正浮动或负浮动 Model Group Case Fx Fy Fz 0 RSA 1 G 100 120.0 0.0 140.0 1 RSA 1 G 101 40.0 140.0 50.0 2 RSA 1 Q 200

我有一个熊猫数据框。数据帧的值是三种计算模型(RSA1、RSA 2、RSA 3)的结果。每个模型的组和案例相同。Fx、Fy、Fz列的值可以是正浮动或负浮动

    Model   Group   Case    Fx      Fy      Fz
0   RSA 1   G       100     120.0   0.0     140.0
1   RSA 1   G       101     40.0    140.0   50.0
2   RSA 1   Q       200     10.0    -50.0   30.0
3   RSA 1   Q       201     -50.0   -20.0   -60.0
4   RSA 1   WX      500     -80.0   -20.0   -40.0
5   RSA 1   WX      501     -10.0   -80.0   70.0
6   RSA 1   WY      600     90.0    -40.0   -10.0
7   RSA 1   WY      601     -80.0   80.0    -20.0
32  RSA 2   G       100     40.0    60.0    140.0
33  RSA 2   G       101     120.0   130.0   140.0
34  RSA 2   Q       200     -90.0   -70.0   -80.0
35  RSA 2   Q       201     50.0    0.0     -100.0
36  RSA 2   WX      500    -70.0    20.0    -20.0
37  RSA 2   WX      501     -50.0   60.0    40.0
38  RSA 2   WY      600    -80.0    90.0    -100.0
39  RSA 2   WY      601     30.0    -60.0   40.0
64  RSA 3   G       100     130.0   50.0    110.0
65  RSA 3   G       101     60.0    20.0    120.0
66  RSA 3   Q       200     0.0    -70.0    40.0
67  RSA 3   Q       201     -10.0   -30.0   -70.0
68  RSA 3   WX      500    -30.0    70.0    -40.0
69  RSA 3   WX      501     60.0    80.0    40.0
70  RSA 3   WY      600    -20.0    80.0    -100.0
71  RSA 3   WY      601     0.0     90.0    -30.0
我渴望:

  • 将同一组中所有案例的值相加,得到所有模型中的最大值和最小值。例如:
  • 模型:rsa1;组:G;外汇->120.0+40.0=160.0

    模型:rsa2;组:G;外汇->40.0+120.0=160.0

    型号:rsa3;组:G;外汇->130.0+60.0=190.0

    最大值:190.0

    最小值:160.0

  • 每种情况下所有模型的最大值和最小值。例如:
  • 模型:rsa1;组:G;案例600;外汇->90.0

    模型:rsa1;组:G;案件601;Fx->-80.0

    模型:rsa2;组:G;案例600;Fx->-80.0

    模型:rsa2;组:G;案件601;外汇->30.0

    型号:rsa3;组:G;案例600;Fx->-20.0

    型号:rsa3;组:G;案件601;外汇->0.0

    最大值:90.0

    最小值:-80.0

  • 将同一组所有案例中相同符号的值相加的所有模型中的最大值和最小值。例如:
  • 模型:rsa1;组:Q;案例200;Fz->30.0

    模型:rsa1;组:Q;案件201;Fz->-60.0

    模型:rsa1;组:Q;增加正值:30.0

    模型:rsa1;组:Q;增加负值:-60.0

    模型:rsa2;组:Q;案例200;Fz->-80.0

    模型:rsa2;组:Q;案件201;Fz->-100.0

    模型:rsa2;组:Q;正值的加法:0.0

    模型:rsa2;组:Q;增加负值:-180.0

    型号:rsa3;组:Q;案例200;Fz->40.0

    型号:rsa3;组:Q;案件201;Fz->-70.0

    型号:rsa3;组:Q;增加正值:40.0

    型号:rsa3;组:Q;增加负值:-70.0

    最大值:40.0

    最小值:-180.0

    这是第一种情况的代码:

    df_1 = df.groupby(['Model', 'Group']).sum()
    df_1.groupby('Group').agg(['max', 'min'])
    
            Fx              Fy              Fz
            max     min     max     min     max     min
    Group                       
    G       190.0   160.0   190.0   70.0    280.0   190.0
    Q       -10.0   -40.0   -70.0   -100.0  -30.0   -180.0
    WX      30.0    -120.0  150.0   -100.0  30.0    0.0
    WY      10.0    -50.0   170.0   30.0    -30.0   -130.0
    
    这是第二种情况的代码:

    df_2 = df.groupby(['Model', 'Group', 'Case']).sum()
    df_2.groupby('Group').agg(['max', 'min'])
    
            Fx              Fy              Fz
            max     min     max     min     max     min
    Group                       
    G       130.0   40.0    140.0   0.0     140.0   50.0
    Q       50.0    -90.0   0.0    -70.0    40.0    -100.0
    WX      60.0    -80.0   80.0    -80.0   70.0    -40.0
    WY      90.0    -80.0   90.0    -60.0   40.0    -100.0
    
    我对第三个案例有个问题:

    df_3 = df.groupby(['Model', 'Group', 'Case']).sum()
    df_31 = df_3.groupby(['Model', 'Group']).agg([
        ('max', lambda x : x[x >= 0].sum()),
        ('min', lambda x : x[x < 0].sum())
        ])
    df_31.groupby('Group').agg(['max', 'min'])
    
            Fx                              Fy                              Fz
            max             min             max             min             max             min
            max     min     max     min     max     min     max     min     max     min     max     min
    Group                                               
    G       190.0   160.0   0.0     0.0     190.0   70.0    0.0     0.0     280.0   190.0   0.0     0.0
    Q       50.0    0.0     -10.0   -90.0   0.0     0.0     -70.0   -100.0  40.0    0.0     -60.0   -180.0
    WX      60.0    0.0     -30.0   -120.0  150.0   0.0     0.0     -100.0  70.0    40.0    -20.0   -40.0
    WY      90.0    0.0     -20.0   -80.0   170.0   80.0    0.0     -60.0   40.0    0.0     -30.0   -130.0
    
    df_3=df.groupby(['Model','Group','Case']).sum()
    df_31=df_3.groupby(['Model','Group']).agg([
    ('max',λx:x[x>=0].sum()),
    ('min',λx:x[x<0].sum())
    ])
    df_31.groupby('Group').agg(['max','min'])
    Fx Fy Fz
    最大最小最大最小最大最小
    最大最小最大最小最大最小最大最小
    团体
    G 190.0 160.0 0.0 0.0 190.0 70.0 0.0 280.0 190.0 0.0 0 0.0
    Q 50.0 0.0-10.0-90.0.0-70.0-100.0 40.0.0-60.0-180.0
    WX 60.0 0.0-30.0-120.0 150.0.0-100.0 70.0 40.0-20.0-40.0
    WY 90.0.0-20.0-80.0 170.0 80.0-60.0 40.0 0.0-30.0-130.0
    
    我无法获得与以前的数据帧格式相同的数据帧


    我要查找的结果在max-max和min-min列中。

    我建议将数据帧拆分为2个子数据帧,并分别处理每个子数据帧,以聚合最小和最大值,并通过更改级别和排序将最后一个连接在一起。
    多索引

    df_3 = df.groupby(['Model', 'Group', 'Case']).sum()
    df_31 = df_3.groupby(['Model', 'Group']).agg([
        ('max', lambda x : x[x >= 0].sum()),
        ('min', lambda x : x[x < 0].sum())
        ])
    
    df_311 = df_31.xs('max', axis=1, level=1).groupby('Group').max()
    df_312 = df_31.xs('min', axis=1, level=1).groupby('Group').min()
    
    df_31 = (pd.concat([df_311, df_312], axis=1, keys=('max','min'))
               .swaplevel(1,0, axis=1)
               .sort_index(axis=1))
    print (df_31)
              Fx            Fy            Fz       
             max    min    max    min    max    min
    Group                                          
    G      190.0    0.0  190.0    0.0  280.0    0.0
    Q       50.0  -90.0    0.0 -100.0   40.0 -180.0
    WX      60.0 -120.0  150.0 -100.0   70.0  -40.0
    WY      90.0  -80.0  170.0  -60.0   40.0 -130.0
    
    df_3=df.groupby(['Model','Group','Case']).sum()
    df_31=df_3.groupby(['Model','Group']).agg([
    ('max',λx:x[x>=0].sum()),
    ('min',λx:x[x<0].sum())
    ])
    df_311=df_31.xs('max',axis=1,level=1).groupby('Group').max()
    df_312=df_31.xs('min',axis=1,level=1).groupby('Group').min()
    df_31=(pd.concat([df_311,df_312],轴=1,键=('max','min'))
    .旋转木马(1,0,轴=1)
    .sort_索引(轴=1))
    打印(df_31)
    Fx Fy Fz
    最大最小最大最小最大最小
    团体
    G 190.0 0.0 190.0 0.0 280.0 0.0
    Q 50.0-90.0 0.0-100.0 40.0-180.0
    WX 60.0-120.0 150.0-100.0 70.0-40.0
    WY 90.0-80.0 170.0-60.0 40.0-130.0