Je voudrais exécuter le code suivant:
sixandinfirst6_df = df[(df['batsman_runs'].shift(1)==6)& (~df['player_dismissed'].notnull()) & (df['over'] == 1)]
sixandinfirst6_df = df[(df['batsman_runs'].shift(1)==6)& (~df['player_dismissed'].notnull()) & (df['over'] == 2)]
sixandinfirst6_df = df[(df['batsman_runs'].shift(1)==6)& (~df['player_dismissed'].notnull()) & (df['over'] == 3)]
... et ainsi de suite jusqu'à:
sixandinfirst6_df = df[(df['batsman_runs'].shift(1)==6)& (~df['player_dismissed'].notnull()) & (df['over'] == 20)]
Quelle est la meilleure façon de procéder sans coller de copie? Je vous remercie.
4 réponses
Utilisez DataFrame.groupby
:
mask=(df['batsman_runs'].shift(1)==6) & (~df['player_dismissed'].notnull())
df_mask= df[mask]
for i, group in df_mask.groupby('over'):
print(group)
sixandinfirst6_df=group
Vous pouvez également créer un dictionnaire de DataFrames et et y accéder en fonction de la valeur over
:
df_over={i:group for i, group in df_mask.groupby('over')}
Vous pouvez utiliser eval () pour exécuter des chaînes en tant que code:
for i in Range(1, 21): eval(
"sixandinfirst6_df = df[(df['batsman_runs'].shift(1)==6)& (~df['player_dismissed'].notnull()) & (df['over'] == {})]".format(i))
Vous pouvez utiliser une boucle de base for
pour exécuter une logique répétée. Tutoriel ici.
for i in range(20):
print(i+1) #use this value for your statement
Les sorties:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Par souci de simplicité, je vais réécrire l'opération en fonction:
def func(df, x):
return df[(df['batsman_runs'].shift(1)==6)& (~df['player_dismissed'].notnull()) & (df['over'] == x)]
Maintenant, pour l'appliquer facilement à une plage et en extraire toutes les valeurs souhaitées, vous pouvez utiliser la compréhension de liste. Étant donné que df est déjà défini dans l'exécution suivante, tout ce que vous avez à faire est de:
all_values_from_1_to_20 = [func(df,x) for x in range(1,21)]
La plage génère une séquence à partir de [x, y), étant x la limite inférieure et y la limite supérieure, pour avoir 20 à l'intérieur de la limite supérieure, vous devez passer 21 car la limite supérieure n'est pas inclusive.
Questions connexes
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.