вы также можете добиться этого с помощью .melt
, .groupby
и np.where
:
df = pd.melt(df, id_vars=['ID1','ID2','Foc_A', 'Foc_B', 'Foc_C'], var_name='Ch', value_name='Sat') \
.groupby(['ID1','ID2','Ch']).agg({'Foc_A':'max','Foc_B':'max', 'Foc_C':'max','Sat':'max'}).reset_index()
df['Foc'] = np.where((df['Ch'] == 'Sat_A'), df['Foc_A'], '')
df['Foc'] = np.where((df['Ch'] == 'Sat_B'), df['Foc_B'], df['Foc'])
df['Foc'] = np.where((df['Ch'] == 'Sat_C'), df['Foc_C'], df['Foc'])
df['Ch'] = df['Ch'].str.replace('Sat_', '')
df = df.drop(['Foc_A', 'Foc_B', 'Foc_C'], axis=1)
df
output:
ID1 ID2 Ch Sat Foc
0 r 1 A 100 10
1 r 1 B 105 15
2 r 1 C 107 17
3 r 2 A 110 20
4 r 2 B 115 25
5 r 2 C 117 27
6 s 1 A 120 30
7 s 1 B 125 35
8 s 1 C 127 37
9 s 2 A 130 40
10 s 2 B 135 45
11 s 2 C 137 47