Как Pandas разделить столбец условно на основе других столбцов? - PullRequest
0 голосов
/ 19 сентября 2018

ниже - мой DataFrame Pandas

Id        IsDef     Data                                       
1         Y         1a
2         N,N,N,Y   2a,2b,2c,2d
3         N,Y       3a,3b

Как мне разделить его, как показано ниже, используя Pandas?Приоритет только для первых двух записей «Да» и «Нет»

Id        DataY_1   DataY_2   DataN_1  DataN_2                                     
1         1a        NULL      NULL     NULL   
2         2d        NULL      2a       2b
3         3b        NULL      3a       NULL

1 Ответ

0 голосов
/ 19 сентября 2018

Вы можете сгладить столбцы до DataFrame:

from itertools import chain

d = df['Data'].str.split(',')
isdef = df['IsDef'].str.split(',')

df = pd.DataFrame({
    'Data' : list(chain.from_iterable(d)), 
    'IsDef' : list(chain.from_iterable(isdef)), 
    'Id' : df['Id'].repeat(d.str.len())
})

Затем использовать cumcount для счетчика по группам и отфильтровать все строки без первых 2 по boolean indexing:

N = 2
df['g'] = df.groupby(['Id','IsDef']).cumcount()
df = df[df['g'] < N]

Затем изменить форму на set_index и unstack и добавить отсутствующие категории на reindex,Последняя сглажена MultiIndex в столбцах на f-string s:

mux = pd.MultiIndex.from_product([['Y','N'], np.arange(N)])
df = df.set_index(['Id','IsDef', 'g'])['Data'].unstack([1,2]).reindex(columns=mux)
df.columns = [f'Data{i}_{j+1}' for i, j in df.columns]
print (df)
   DataY_1  DataY_2 DataN_1 DataN_2
Id                                 
1       1a      NaN     NaN     NaN
2       2d      NaN      2a      2b
3       3b      NaN      3a     NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...