Python DataFrame:在列中添加相同符号值的最大值和最小值
我有一个熊猫数据框。数据帧的值是三种计算模型(RSA1、RSA 2、RSA 3)的结果。每个模型的组和案例相同。Fx、Fy、Fz列的值可以是正浮动或负浮动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
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
我渴望:
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