У меня есть этот фрейм данных с некоторыми 'init'
значениями ('value'
, 'value2'
), которые я хочу вычесть к среднесрочному значению 'mid'
и окончательному значению 'final'
после группировкиID.
import pandas as pd
df = pd.DataFrame({
'value': [100, 120, 130, 200, 190,210],
'value2': [2100, 2120, 2130, 2200, 2190,2210],
'ID': [1, 1, 1, 2, 2, 2],
'state': ['init','mid', 'final', 'init', 'mid', 'final'],
})
Моя попытка состояла в том, чтобы извлечь индекс, в котором я нашел 'init'
, 'mid'
и 'final'
, и вычесть из 'mid'
и 'final'
значение 'init'
, как только яВы сгруппировали значение по 'ID'
:
group = df.groupby('ID')
group['diff_1_f'] = group['value'].iloc[group.index[group['state'] == 'final'] - group['value'].iloc[group.index[dfs['state'] == 'init']]]]
group['diff_2_f'] = group['value2'].iloc[group.index[group['state'] == 'final'] - group['value'].iloc[group.index[dfs['state'] == 'init']]]
group['diff_1_m'] = group['value'].iloc[group.index[group['state'] == 'mid'] - group['value'].iloc[group.index[dfs['state'] == 'init']]]
group['diff_2_m'] = group['value2'].iloc[group.index[group['state'] == 'mid'] - group['value'].iloc[group.index[dfs['state'] == 'init']]]
Но, конечно, это не работает. Как я могу получить следующий результат:
df = pd.DataFrame({
'diff_value': [20, 30, -10,10],
'diff_value2': [20, 30, -10,10],
'ID': [ 1, 1, 2, 2],
'state': ['mid', 'final', 'mid', 'final'],
})
Также в сгруппированном виде.