Python падение счетчика в фрейме данных - PullRequest
0 голосов
/ 26 мая 2020

Я хотел бы подсчитать количество раз, когда строка моего Df находится ниже порога.

Я пробовал этот код:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from numpy.ma.extras import _ezclump as ez

years = np.arange(2000, 2010)
engine = ['A', 'B']
df = pd.DataFrame({
'Engine': np.repeat(['A', 'B'], 10),
'Year': np.tile(np.arange(2000, 2010), 2),
'Energy' : np.repeat([50,50,100,100,100,100,100,100,50,50,50,50,100,100,100,100,100,100,50,50], 1),
})

df = df.sort_values(['Engine','Year']).set_index('Year')    

Max = {'A':100,
'B':100}

df['Max']=df.Engine.map(Max)

df['ratio'] = df['Energy'] / df['Max']

df['interval'] = df['ratio'].apply(lambda x: 2 if x >= 0.80 else (1 if x < 0.80 and x >= 0.20 else 0        ))

engine_off = ez((df['interval'] == 1).to_numpy())

В моем Df есть 4

Но настоящая проблема в том, что в моем engine_off во 2-й срез включаются Engine A и B. Таким образом, его счетчик только 3 капли, а не 4.

Кто-нибудь, как я могу сделать, чтобы исправить это?

Большое спасибо

1 Ответ

0 голосов
/ 26 мая 2020

Может быть, вы хотите сделать это на каждом типе двигателя? Примерно так:

engine_off_dict = {}
for name, frame in df.groupby('Engine'):
    engine_off = {name: ez((frame['interval'] == 1).to_numpy())}
    engine_off_dict.update(engine_off)
engine_off_dict

{'A': [slice(0, 2, None), slice(8, 10, None)],
 'B': [slice(0, 2, None), slice(8, 10, None)]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...