Расщепление столбцов и именование в пандах - PullRequest
1 голос
/ 19 мая 2019

У меня есть файл данных, который содержит столбцы временного интервала, такие как 0-10,11-20,21-30 ...., 81-90.Есть также два дополнительных столбца FH и SH. Следующий образец данных представляет часть моих данных:

df = pd.DataFrame()
df['Team'] = ['A','B','C']
df['0-10'] = ['4-0','2-2','3-2']
df ['11-20']= ['2-1','2-2','3-0']
df ['21-30'] = ['2-1','1-1','2-2']
df ['FH'] = ['5-3','6-6','5-5']
df ['SH'] = ['2-3','3-2','3-3']

Я хотел разделить элемент на временные интервалы (0-10,11-20, 21-30) это означает, что у меня будет два разных столбца для каждого временного интервала ['0-10'] до ['0-10F' и '0-10A'], а значение в поле '0-10F' будет равно 4и '0-10A' будет 0 для команды A, я сделаю то же самое для другого интервала времени: от '11 -20' до '11 -20F 'и '11 -20A'. Я мог бы написать код для каждого столбца отдельно, как указано ниже:

df ['0-10F'] = df['0-10'].str.split('-').str[0]
df ['0-10A'] = df['0-10'].str.split('-').str[1]
df ['11-20F'] = df['11-20'].str.split('-').str[0]
df ['11-20A'] = df['11-20'].str.split('-').str[1]
df ['21-30F'] = df['21-30'].str.split('-').str[0]
df ['21-30A'] = df['21-30'].str.split('-').str[1]

Есть ли лучший способ написать это для всех столбцов с одним общим кодом.Ниже приводится ожидаемый результат:

enter image description here

Спасибо.

Zep.

1 Ответ

1 голос
/ 19 мая 2019

Используйте DataFrame.filter для имен столбцов с -, цикл по каждому столбцу и создание нового DataFrame с Series.str.split и при необходимости преобразуйте значения в целые числа:

for c in df.filter(like='-').columns:
    df[[f'{c}F', f'{c}A']] = df[c].str.split('-', expand=True).astype(int)

print (df)
  Team 0-10 11-20 21-30   FH   SH  0-10F  0-10A  11-20F  11-20A  21-30F  \
0    A  4-0   2-1   2-1  5-3  2-3      4      0       2       1       2   
1    B  2-2   2-2   1-1  6-6  3-2      2      2       2       2       1   
2    C  3-2   3-0   2-2  5-5  3-3      3      2       3       0       2   

   21-30A  
0       1  
1       1  
2       2  
...