Выберите столбцы данных в зависимости от условий - PullRequest
0 голосов
/ 27 апреля 2018

Фрейм входных данных:

    a   b  c    d   e    f    g       j   k  l    m    n    o    p    q   r      s  t
2  33  17  0  418  -5  -81  NaN   14336  81  1  462  -24  NaN   81    1   462  -24 NaN  
5  33  17  0  415  -5  -116 NaN   14336  81  0  487   -5  116   81    1   462  -24 NaN 
7  33  17  0  413  -5  -116 NaN   14336  81  1  462  -24  NaN   81    1   462  -24 -111 

Проверьте значение столбца c, если оно равно 0: вставьте значения d e f в x1 x2 x3 Проверьте значение столбца l, если оно равно 0: вставьте значения m n o в y1 y2 y3

, если значение столбца l равно 1: отметьте столбцы o и t: первый, содержащий значение, вставьте m n o или r s t в столбцы z1 z2 z3

Кадр выходных данных:

    x1  x2    x3    y1    y2    y3    z1   z2    z3
2  418  -5   -81   NaN   NaN   NaN   462  -24   NaN
5  415  -5  -116   487    -5   116   462  -24   NaN
7  413  -5   -81   NaN   NaN   NaN   462  -24  -111

1 Ответ

0 голосов
/ 27 апреля 2018

Я считаю, что нужно where для фильтрации по условию с concat для объединения всех DataFrame с и combine_first для замены NaN с другого DataFrame:

df1 = df[['d','e','f']].where(df['c'].eq(0))
df1.columns = ['x1','x2','x3']

df2 = df[['m','n','o']].where(df['l'].eq(0))
df2.columns = ['y1','y2','y3']

df31 = df[['m','n','o']].where(df['l'].eq(1) & df['o'].notnull())
df31.columns = ['z1','z2','z3']

df32 = df[['r','s','t']].where(df['l'].eq(1) & df['t'].notnull())
df32.columns = ['z1','z2','z3']

df = pd.concat([df1, df2, df31.combine_first(df32)], axis=1)
print (df)
    x1  x2   x3     y1   y2     y3     z1    z2     z3
2  418  -5  -81    NaN  NaN    NaN    NaN   NaN    NaN
5  415  -5 -116  487.0 -5.0  116.0    NaN   NaN    NaN
7  413  -5 -116    NaN  NaN    NaN  462.0 -24.0 -111.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...