Использование условия для разделения панд столбца списков на несколько столбцов. - PullRequest
0 голосов
/ 25 июня 2018

У меня есть пандас dataFrame с двумя столбцами, который выглядит следующим образом:

d1 = {'Time1': [[93, 109, 187],[159],[94, 96, 154, 169]],
              'Time2':[[16, 48, 66, 128],[123, 136],[40,177,192]]}

df = pd.DataFrame(d1)

Мне нужно разделить эти столбцы списков на 4 столбца с именами 1st_half_T1, 2nd_half_T1, 1st_half_T2 и 2nd_half_T2, используя панд. Условие состоит в том, что Time1 разделяется на 1st_half, если Time <= 96, и 2nd_half, если Time > 96, и применение того же условия к Time2 дает следующий вывод.

  1st_half_T1           2nd_half_T1     1st_half_T2      2nd_half_T2
0       [93]             [109, 187]    [16, 48, 66]           [128]
1         []                  [159]              []      [123, 126]
2   [94, 96]             [154, 169]            [40]      [177, 192]

Ответы [ 3 ]

0 голосов
/ 25 июня 2018

Использование apply с пользовательской функцией

def my_split(row):
    return pd.Series({
        '1st_half_T1': [i for i in row.Time1 if i <= 96],
        '2nd_half_T1': [i for i in row.Time1 if i > 96],
        '1st_half_T2': [i for i in row.Time2 if i <= 96],
        '2nd_half_T2': [i for i in row.Time2 if i > 96]
    })
df.apply(my_split, axis=1)

Out[]:
  1st_half_T1   1st_half_T2 2nd_half_T1 2nd_half_T2
0        [93]  [16, 48, 66]  [109, 187]       [128]
1          []            []       [159]  [123, 136]
2    [94, 96]          [40]  [154, 169]  [177, 192]
0 голосов
/ 25 июня 2018
df_new = pd.DataFrame()

df_new.loc[:,'1st_half_T1'] = df['Time1'].apply(lambda x : [y for y in x if y <=96])
df_new.loc[:,'2nd_half_T1'] = df['Time1'].apply(lambda x : [y for y in x if y >96])
df_new.loc[:,'1st_half_T2'] = df['Time2'].apply(lambda x : [y for y in x if y <=96])
df_new.loc[:,'2nd_half_T2'] = df['Time2'].apply(lambda x : [y for y in x if y >96])
df_new
Out[64]: 
  1st_half_T1 2nd_half_T1   1st_half_T2 2nd_half_T2
0        [93]  [109, 187]  [16, 48, 66]       [128]
1          []       [159]            []  [123, 136]
2    [94, 96]  [154, 169]          [40]  [177, 192]
0 голосов
/ 25 июня 2018

Использовать списки с конструктором DataFrame:

t11 = [[y for y in x if y <=96] for x in df['Time1']]
t12 = [[y for y in x if y >96] for x in df['Time1']]

t21 = [[y for y in x if y <=96] for x in df['Time2']]
t22 = [[y for y in x if y >96] for x in df['Time2']]

df = pd.DataFrame({'1st_half_T1':t11, '2nd_half_T1':t12,'1st_half_T2':t21, '2nd_half_T2':t22})
print (df)
  1st_half_T1 2nd_half_T1   1st_half_T2 2nd_half_T2
0        [93]  [109, 187]  [16, 48, 66]       [128]
1          []       [159]            []  [123, 136]
2    [94, 96]  [154, 169]          [40]  [177, 192]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...