在Pandas中,有没有一种方法可以减去同一列中两个具有相同名称的值?

时间:2020-06-21 16:39:39

标签: python pandas dataframe

这是我要分析的数据框的摘要。我想做的就是仅在X_LOT_NAME相同的情况下,才从D8_FLOW FORMATTED_ENTRY值中减去FP_FLOW FORMATTED_ENTRY值。例如,在X_LOT_NAME列中,您可以看到MPACZX2。 D8_FLOW FORMATTED_ENTRY为12.3%。 FP_FLOW FORMATTED_ENTRY值为7.8%。两者之间的差异为4.5%。我想将此逻辑应用于整个数据集

enter image description here

2 个答案:

答案 0 :(得分:0)

这是您要寻找的吗?

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

答案 1 :(得分:0)

建议首先将数据转换为要添加/减去的值在同一行中的格式,然后再减去/添加相应的列。您可以使用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_FLOWFP_FLOW,其中X_LOT_NAME为索引。现在,您可以使用以下命令在新列中获取预期值:

pivot_data['DIFF'] =  pivot_data['D8_FLOW'] - pivot_data['FP_FLOW']