Разделение датафрейма в Python - PullRequest
0 голосов
/ 06 июня 2018

У меня есть фрейм данных df =

    Type   ID      QTY_1   QTY_2  RES_1   RES_2
    X       1       10      15      y       N
    X       2       12      25      N       N
    X       3       25      16      Y       Y
    X       4       14      62      N       Y
    X       5       21      75      Y       Y
    Y       1       10      15      y       N
    Y       2       12      25      N       N
    Y       3       25      16      Y       Y
    Y       4       14      62      N       N
    Y       5       21      75      Y       Y

Я хочу получить результирующий набор данных из двух разных фреймов данных с QTY, который имеет Y в соответствующем RES.Ниже мой ожидаемый результат

df1= 

Type   ID      QTY_1   
X       1       10
X       3       25
X       5       21
Y       1       10 
Y       3       25
Y       5       21

df2 = 

Type   ID      QTY_2
X       3       16  
X       4       62
X       5       75
Y       3       16
Y       5       75

Ответы [ 3 ]

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

Использование словаря

Хорошей практикой является использование словаря для переменного числа переменных.Хотя в этом случае может быть только несколько категорий, вы получаете пользу от организованных данных.Например, вы можете получить доступ к RES_1 данным через dfs[1].

dfs = {i: df.loc[df['RES_'+str(i)].str.lower() == 'y', ['Type', 'ID', 'QTY_'+str(i)]] \
          for i in range(1, 3)}

print(dfs)

{1:   Type  ID  QTY_1
0    X   1     10
2    X   3     25
4    X   5     21
5    Y   1     10
7    Y   3     25
9    Y   5     21,
 2:   Type  ID  QTY_2
2    X   3     16
3    X   4     62
4    X   5     75
7    Y   3     16
9    Y   5     75}
0 голосов
/ 06 июня 2018

Вам нужно:

df1 = df.loc[(df['RES_1']=='Y') | (df['RES_1']=='y')].drop(['QTY_2', 'RES_1', 'RES_2'], axis=1)

df2 = df.loc[(df['RES_2']=='Y') | (df['RES_2']=='y')].drop(['QTY_1', 'RES_1', 'RES_2'], axis=1)
print(df1)
print(df2)

Вывод:

   Type ID  QTY_1
0   X   1   10
2   X   3   25
4   X   5   21
5   Y   1   10
7   Y   3   25
9   Y   5   21

  Type  ID  QTY_2
2   X   3   16
3   X   4   62
4   X   5   75
7   Y   3   16
9   Y   5   75
0 голосов
/ 06 июня 2018

Вы можете сделать это:

df1 = df[['Type', 'ID', 'QTY_1']].loc[df.RES_1.isin(['Y', 'y'])]

df2 = df[['Type', 'ID', 'QTY_2']].loc[df.RES_2.isin(['Y', 'y'])]

или

df1 = df[['Type', 'ID', 'QTY_1']].loc[df.RES_1.str.lower() == 'y']

df2 = df[['Type', 'ID', 'QTY_2']].loc[df.RES_2.str.lower() == 'y']

Выход:

>>> df1
  Type  ID  QTY_1
0    X   1     10
2    X   3     25
4    X   5     21
5    Y   1     10
7    Y   3     25
9    Y   5     21
>>> df2
  Type  ID  QTY_2
2    X   3     16
3    X   4     62
4    X   5     75
7    Y   3     16
9    Y   5     75
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...