Python 在数据帧内的组之间减去值

Python 在数据帧内的组之间减去值,python,pandas,Python,Pandas,我试图以有效的方式计算两组数据不匹配的差异 以下数据帧,df df=pd.DataFrame({'type':['A','A','W','W','W'], ‘代码’:[‘1’、‘2’、‘3’、‘1’、‘2’、‘4’], “值”:[50,25,25,50,10,40]}) 有两种类型具有不匹配的“代码”-值得注意的是,“W”类型不存在代码3,而“A”类型不存在代码4。我将代码包装为字符串,因为在我的特殊情况下,它们有时是字符串 我想减去两种类型之间匹配代码的值,以便我们得到 result = p

我试图以有效的方式计算两组数据不匹配的差异

以下数据帧,
df

df=pd.DataFrame({'type':['A','A','W','W','W'],
‘代码’:[‘1’、‘2’、‘3’、‘1’、‘2’、‘4’],
“值”:[50,25,25,50,10,40]})
有两种类型具有不匹配的“代码”-值得注意的是,“W”类型不存在代码3,而“A”类型不存在代码4。我将代码包装为字符串,因为在我的特殊情况下,它们有时是字符串

我想减去两种类型之间匹配代码的值,以便我们得到

result = pd.DataFrame({'code': ['1', '2', '3', '4'],
                       'diff': [0, 15, 25, -40]})
符号将指示哪种类型的值更大

我在这里花了一些时间研究了groupbydiff方法的变体,但没有看到任何处理两个可能不匹配的列之间相减的特殊问题的方法。相反,大多数问题似乎适合diff()方法的预期用途


我最近尝试的方法是使用
df.groupby['type']
上的列表理解将其拆分为两个数据帧,但在减去不匹配的事例方面,我仍然存在类似的问题。

groupby on code,然后用0替换缺少的值

df = pd.DataFrame({'type': ['A', 'A', 'A', 'W', 'W', 'W'],
                   'code': ['1', '2', '3', '1', '2', '4'],
                   'values': [50, 25, 25, 50, 10, 40]})

def my_func(x):
    # What if there are more than 1 value for a type/code combo?
    a_value = x[x.type == 'A']['values'].max() 
    w_value = x[x.type == 'W']['values'].max()

    a_value = 0 if np.isnan(a_value) else a_value
    w_value = 0 if np.isnan(w_value) else w_value
    return a_value - w_value

df_new = df.groupby('code').apply(my_func)

df_new = df_new.reset_index()
df_new = df_new.rename(columns={0:'diff'})

print(df_new)

  code  diff
0    1     0
1    2    15
2    3    25
3    4   -40

df
中的
值是错误的。这里有7个值而不是6个,请删除一个。如果您在某处需要空单元格,请将其添加为
'
,以及如何计算代码
4
-40
?请修复您的输入更正值,谢谢。0-40=-40,因为AThanks类型没有代码4!我也很高兴能预见到重复问题。