Есть ли способ в Pandas вычесть два значения в одном столбце с одинаковым именем? - PullRequest
0 голосов
/ 21 июня 2020

Вот фрагмент фрейма данных, который я пытаюсь проанализировать. Я хочу просто вычесть значения FP_FLOW FORMATTED_ENTRY из значений D8_FLOW FORMATTED_ENTRY, только если X_LOT_NAME совпадает. Например, в столбце X_LOT_NAME вы можете увидеть MPACZX2. D8_FLOW FORMATTED_ENTRY составляет 12,3%. Значение FP_FLOW FORMATTED_ENTRY составляет 7,8%. Разница между ними составит 4,5%. Я хочу применить этот logi c ко всему набору данных

введите описание изображения здесь

Ответы [ 2 ]

0 голосов
/ 21 июня 2020

рекомендуется сначала преобразовать ваши данные в формат, в котором значения, которые нужно добавить / вычесть, находятся в одной строке, а после этого вычесть / добавить соответствующие столбцы. Вы можете сделать это, используя pd.pivot-table. В приведенном ниже примере это демонстрируется с использованием образца фрейма данных, аналогичного тому, который вы поделили:

wanted_data

    X_LOT_NAME  SPEC_TYPE   FORMATTED_ENTRY
0   a   FP_FLOW     1
1   a   D8_FLOW     2
2   c   FP_FLOW     3
3   c   D8_FLOW     4

pivot_data  = pd.pivot_table(wanted_data,values='FORMATTED_ENTRY',index='X_LOT_NAME',columns='SPEC_TYPE')
pivot_data
SPEC_TYPE   D8_FLOW     FP_FLOW
X_LOT_NAME      
a   2   1
c   4   3

После этого шага результирующий pivot_data содержит те же данные, но столбцы - D8_FLOW и FP_FLOW с индексом X_LOT_NAME. Теперь вы можете получить желаемое значение в новом столбце, используя:

pivot_data['DIFF'] =  pivot_data['D8_FLOW'] - pivot_data['FP_FLOW'] 
0 голосов
/ 21 июня 2020

Это то, что вы ищете?

df.groupby(['x_lot'])['value'].diff()

0     NaN
1     NaN
2    -5.0
3     8.0
4    -3.0
5     NaN
6   -10.0
Name: value, dtype: float64

Это данные, которые я использовал для получения вышеуказанных результатов

    x_lot   type    value
0   mpaczw1 fp  21
1   mpaczw2 d8  12
2   mpaczw2 fp  7
3   mpaczw2 d8  15
4   mpaczw2 fp  12
5   mpaczw3 d8  21
6   mpaczw3 fp  11
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...