Как перебрать значение внутри функции от 1 до 20 в Python? - PullRequest
0 голосов
/ 03 ноября 2019

Я хотел бы запустить следующий код:

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)]

... и т. Д. до:

sixandinfirst6_df = df[(df['batsman_runs'].shift(1)==6)& (~df['player_dismissed'].notnull()) & (df['over'] == 20)]

Какой лучший способ сделать это без вставки копии? Спасибо.

Ответы [ 3 ]

0 голосов
/ 03 ноября 2019

для простоты я перепишу операцию как функцию:

def func(df, x):
  return df[(df['batsman_runs'].shift(1)==6)& (~df['player_dismissed'].notnull()) & (df['over'] == x)]

Теперь, чтобы легко применить ее к диапазону и получить из нее все нужные значения, вы можетеиспользовать список понимания. Учитывая, что df уже определен в следующем выполнении, все, что вам нужно сделать, это:

all_values_from_1_to_20 = [func(df,x) for x in range(1,21)]

range генерирует последовательность из [x, y), где x является нижней границей, а y верхней границей,чтобы иметь 20 внутри верхней границы, вам нужно пройти 21, так как верхняя граница не включается.

0 голосов
/ 03 ноября 2019

Вы можете использовать eval () для запуска строк в виде кода:

for i in Range(1, 21): eval(
        "sixandinfirst6_df = df[(df['batsman_runs'].shift(1)==6)& (~df['player_dismissed'].notnull()) & (df['over'] == {})]".format(i))

0 голосов
/ 03 ноября 2019

Использование 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

Также вы можете создать диктофон DataFrames и получить к нему доступ на основе значения over:

df_over={i:group for i, group in df_mask.groupby('over')}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...