从数据帧中切片和提取

问题描述 投票:0回答:1

我有一个如下所示的数据框:

     time  power speed state 

1   14.00  29    3     1
2   14.01  30    3     2
3   14.02  29    3     3
4   14.03  30    3     4
5   14.04  29    3     5
6   14.05  30    3     6
7   14.06  29    3     6
8   14.07  30    3     6
9   14.08  29    3     6
10  14.09  30    3     5
11  14.10  29    3     5
12  14.11  30    3     5
13  14.12  29    3     5
14  14.13  30    3     6
15  14.14  31    4     6 
16  14.15  32    4     6

每个周期从状态 5(第 10 行,仅在状态 6 之后)开始,并在状态 6 返回之前结束(即第 13 行)。所以周期 1 位于第 10 行和第 13 行之间。

这是一个大数据,并且有多个周期。我想将每个周期提取为数据框。 我尝试了一些迭代,但没有成功。

 charge_cycles = []
current_charge_start = None
current_drive_start = None
total_energy_consumed = 0
drive_data = []

for index, row in data.iterrows():
    if row['state'] == '6':
        if current_drive_start is not None:
            energy_during_drive = total_energy_consumed
            charge_cycles.append(energy_during_drive)
            drive_data.append(data.loc[current_drive_start:index])
            current_drive_start = None
            total_energy_consumed = 0
        current_charge_start = row['time']
    elif row['state'] == '5':
        if current_charge_start is not None and current_drive_start is None:
            current_drive_start = index
        if current_drive_start is not None:
            total_energy_consumed += row['power'] * (row['time'] - data.loc[current_drive_start, 'time'])
            current_drive_start = index

# Print the energy consumption during driving between each charge cycle
for i, energy in enumerate(charge_cycles, start=1):
    print(f"Charge Cycle {i}: Energy Consumed During Driving = {energy} units")

# Display the DataFrames for each driving cycle
for i, drive_df in enumerate(drive_data, start=1):
    print(f"Driving Cycle {i}:\n{drive_df}")

这给了我整个数据框。谁能帮我解决这个问题的Python代码吗?

python pandas dataframe slice
1个回答
0
投票

您可以尝试使用布尔索引和

groupby
:

m1 = df['state'].eq(5)
m2 = df['state'].shift().eq(6)

dfs = [g for k,g in df[m1].groupby((m1&m2).cumsum())]

子数据帧的输出列表:

[    time  power  speed  state
5  14.04     29      3      5,      time  power  speed  state
10  14.09     30      3      5
11  14.10     29      3      5
12  14.11     30      3      5
13  14.12     29      3      5]
© www.soinside.com 2019 - 2024. All rights reserved.