gpt4 book ai didi

python - 如何在 Python 中使用带条件的 Groupby

转载 作者:太空宇宙 更新时间:2023-11-04 03:06:42 24 4
gpt4 key购买 nike

我有一个名为 merged_df_energy 的数据框

merged_df_energy.info()

<class 'pandas.core.frame.DataFrame'>
Int64Index: 11232 entries, 0 to 11231
Data columns (total 17 columns):
TIMESTAMP 11232 non-null datetime64[ns]
P_ACT_KW 11232 non-null int64
PERIODE_TARIF 11232 non-null object
P_SOUSCR 11232 non-null int64
high_energy 11232 non-null int64
medium_energy 11232 non-null int64
low_energy 11232 non-null int64
0ACT_TIME_ETA_PRG_P2REF_RM 11232 non-null int64
0ACT_TIME_ETA_PRG_VDES_RM 11232 non-null int64
0ACT_TIME_ETA_PRG_P3REF_RM 11232 non-null int64
0ACT_TIME_ETA_POMP_RECIRC_N1 11232 non-null int64
0ACT_TIME_ETA_POMP_RECIRC_N2 11232 non-null int64
0ACT_TIME_ETA_POMP_RECIRC_N3 11232 non-null int64
0ACT_TIME_ETA_SURPRES_AIR_N1 11232 non-null int64
0ACT_TIME_ETA_SURPRES_AIR_N2 11232 non-null int64
0ACT_TIME_ETA_SURPRES_AIR_N3 11232 non-null int64
class_energy 11232 non-null object
dtypes: datetime64[ns](1), int64(14), object(2)
memory usage: 1.5+ MB

具有这种结构:

TIMESTAMP P_ACT_KW PERIODE_TARIF P_SOUSCR high_energy medium_energy low_energy 0ACT_TIME_ETA_PRG_P2REF_RM 0ACT_TIME_ETA_PRG_VDES_RM 
0ACT_TIME_ETA_PRG_P3REF_RM 0ACT_TIME_ETA_POMP_RECIRC_N1 0ACT_TIME_ETA_POMP_RECIRC_N2 0ACT_TIME_ETA_POMP_RECIRC_N3
0ACT_TIME_ETA_SURPRES_AIR_N1 0ACT_TIME_ETA_SURPRES_AIR_N2
0ACT_TIME_ETA_SURPRES_AIR_N3 class_energy


2016-05-10 04:30:00 107 HP 250 107 0 0 100 0 0 0 0 0 0 0 0 high

2016-05-10 04:40:00 109 HC 250 109 0 0 0 0 100 0 0 0 0 0 0 high

2016-05-10 04:50:00 106 HP 250 106 0 0 0 0 100 0 0 0 0 0 0 high

我尝试计算 (0ACT_TIME_ETA_PRG_P2REF_RM, 0ACT_TIME_ETA_PRG_VDES_RM, 0ACT_TIME_ETA_PRG_P3REF_RM, 0ACT_TIME_ETA_POMP_RECIRC_N1 0ACT_TIME_ETA_POMP_RECIRC_N2, 0ACT_TIME_ETA_POMP_RECIRC_N3, 0ACT_TIME_ETA_POMP_RECIRC_N3, 0ACT_ETA_NAIR_N3, 0ACT_ETA_RES_N3 的总和TIME_ETA_SURPRES_AIR_N2, 0ACT_TIME_ETA_SURPRES_AIR_N3 class_energy) 按 (class_energy) 分组。

为此我做了:

df_F1 = (merged_df_energy.groupby(by=['class_energy'], as_index=False)['0ACT_TIME_ETA_PRG_P2REF_RM', '0ACT_TIME_ETA_PRG_VDES_RM','0ACT_TIME_ETA_PRG_P3REF_RM','0ACT_TIME_ETA_POMP_RECIRC_N1','0ACT_TIME_ETA_POMP_RECIRC_N2', '0ACT_TIME_ETA_POMP_RECIRC_N3', '0ACT_TIME_ETA_SURPRES_AIR_N1', '0ACT_TIME_ETA_SURPRES_AIR_N2', '0ACT_TIME_ETA_SURPRES_AIR_N3' ].sum())

它工作正常,但我想知道如何在这种情况下执行此操作(如果 PERIODE_TARIF = 'HP')?

最佳答案

我想你需要在 groupby 之前 boolean indexing :

merged_df_energy1 = merged_df_energy[merged_df_energy.PERIODE_TARIF == 'HP']

cols = ['0ACT_TIME_ETA_PRG_P2REF_RM',
'0ACT_TIME_ETA_PRG_VDES_RM',
'0ACT_TIME_ETA_PRG_P3REF_RM',
'0ACT_TIME_ETA_POMP_RECIRC_N1',
'0ACT_TIME_ETA_POMP_RECIRC_N2',
'0ACT_TIME_ETA_POMP_RECIRC_N3',
'0ACT_TIME_ETA_SURPRES_AIR_N1',
'0ACT_TIME_ETA_SURPRES_AIR_N2',
'0ACT_TIME_ETA_SURPRES_AIR_N3']
df_F1 = (merged_df_energy1.groupby(by=['class_energy'], as_index=False)[cols].sum())

print (df_F1)
class_energy 0ACT_TIME_ETA_PRG_P2REF_RM 0ACT_TIME_ETA_PRG_VDES_RM \
0 high 100 0

0ACT_TIME_ETA_PRG_P3REF_RM 0ACT_TIME_ETA_POMP_RECIRC_N1 \
0 100 0

0ACT_TIME_ETA_POMP_RECIRC_N2 0ACT_TIME_ETA_POMP_RECIRC_N3 \
0 0 0

0ACT_TIME_ETA_SURPRES_AIR_N1 0ACT_TIME_ETA_SURPRES_AIR_N2 \
0 0 0

0ACT_TIME_ETA_SURPRES_AIR_N3
0 0

编辑:

如果列的顺序永远不会改变,您可以使用:

cols = merged_df_energy.columns[7:16]
print (cols)
Index(['0ACT_TIME_ETA_PRG_P2REF_RM', '0ACT_TIME_ETA_PRG_VDES_RM',
'0ACT_TIME_ETA_PRG_P3REF_RM', '0ACT_TIME_ETA_POMP_RECIRC_N1',
'0ACT_TIME_ETA_POMP_RECIRC_N2', '0ACT_TIME_ETA_POMP_RECIRC_N3',
'0ACT_TIME_ETA_SURPRES_AIR_N1', '0ACT_TIME_ETA_SURPRES_AIR_N2',
'0ACT_TIME_ETA_SURPRES_AIR_N3'],
dtype='object')

关于python - 如何在 Python 中使用带条件的 Groupby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39222507/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com