Условные операции - PullRequest
       7

Условные операции

0 голосов
/ 29 октября 2018

У меня есть фрейм данных, в котором я хотел бы выполнить некоторые операции между столбцами, которые удовлетворяют некоторым критериям.

Например, у меня есть следующая таблица:

enter image description here

Что меня интересует, так это вычитать каждый столбец, который имеет для Mar = P из каждого столбца, который имеет Mar = I, но тот же Type

В конце я бы хотел следующее:

Примечание: Значения являются только ориентировочными.

enter image description here

enter image description here

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Вы можете попробовать это:

df = pd.DataFrame({'Size':[*'ABCDEF'],'Com':[*'PGPGPG'], 'Mar':[*'IPIPEA'],
                   '0':[1,2,3,4,5,6],
                   '1':[2,2,2,2,2,2],
                   '2':[3,3,3,3,3,3],
                   '3':[4,4,4,4,4,4],
                   'Type':['Lamba1']*2+['Lamba2']*2+['Lamba1']*2})

df1 = df.set_index(['Size','Com','Mar','Type']).T
print(df1)

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

Size      A      B      C      D      E      F
Com       P      G      P      G      P      G
Mar       I      P      I      P      E      A
Type Lamba1 Lamba1 Lamba2 Lamba2 Lamba1 Lamba1
0         1      2      3      4      5      6
1         2      2      2      2      2      2
2         3      3      3      3      3      3
3         4      4      4      4      4      4

Используйте pd.IndexSlice и groupby:

idx = pd.IndexSlice
df_out = df1.loc[:,idx[:,:,'I':'P',:]].T.groupby('Type').diff().dropna().T.rename({'B':'L','D':'L','G':'C','P':'X'}, axis=1)
print(df_out)

Результаты вывода:

Size      L       
Com       C       
Mar       X       
Type Lamba1 Lamba2
0       1.0    1.0
1       0.0    0.0
2       0.0    0.0
3       0.0    0.0
0 голосов
/ 29 октября 2018

Если я не понял вопрос, похоже, это простой случай маскировки.

dict = {'Size':['A', 'B', 'C', 'D'],'Com':['P', 'G', 'P', 'G'], 'Mar':['I', 'P', 'I', 'P'], 'Type':['Lambda1', 'Lambda2', 'Lambda1', 'Lambda2'],'0':[1,2,3,4], '1':[2,2,2,2],'2':[3,3,3,3,], '3':[4,4,4,4]}
df = pd.DataFrame(dict)
#To get Lambda1 & 'I'
df[(df['Type']=='Lambda1') & (df['Mar']=='I')].T

#To get Lambda2 & 'P'
df[(df['Type']=='Lambda2') & (df['Mar']=='P')].T
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...