微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 从另一个数据帧中减去一个Pandas Dataframe中的属性值

此问题包含3个单独的数据帧.
df1代表产品1,2,3的’Total’,包含’value1′,’value2′
df2代表产品1,2,3的’Customer1′,包含’value1′,’value2′
df3代表产品1,2,3的’Customer2′,包含’value1′,’value2′

df2& df3基本上是df1的子集.

我想创建另一个数据帧,从df1中减去df2& df3并标记这个df4.我希望df4成为“市场”专栏中的“剩余客户”.

这就是我到目前为止所做的

import pandas as pd


d1 = {'Market': ['Total', 'Total','Total'], 'Product Code': [1, 2, 3], 
'Value1':[10, 20, 30], 'Value2':[5, 15, 25]}
df1 = pd.DataFrame(data=d1)
df1



d2 = {'Market': ['Customer1', 'Customer1','Customer1'], 'Product Code': [1, 
2, 3], 'Value1':[3, 14, 10], 'Value2':[2, 4, 6]}
df2 = pd.DataFrame(data=d2)
df2


d3 = {'Market': ['Customer2', 'Customer2','Customer2'], 'Product Code': [1, 
2, 3], 'Value1':[3, 3, 4], 'Value2':[2, 6, 10]}
df3 = pd.DataFrame(data=d3)
df3

这产生以下结果..

Market  Product Code  Value1  Value2
0  Total             1      10       5
1  Total             2      20      15
2  Total             3      30      25
  Market  Product Code  Value1  Value2
0  Customer1             1       3       2
1  Customer1             2      14       4
2  Customer1             3      10       6
  Market  Product Code  Value1  Value2
0  Customer2             1       3       2
1  Customer2             2       3       6
2  Customer2             3       4      10

要创建df4,我尝试以下代码获取错误’TypeError:不支持的操作数类型 – :’str’和’str”任何人都可以帮忙吗?

df4 = df1-(df2+df3)

print(df4)

解决方法:

这是一种方式:

cols = ['Value1', 'Value2']
df4 = df1[cols].subtract(df2[cols].add(df3[cols]))\
               .assign(**{'Market': 'RemainingCustomers', 'Product Code': [1, 2, 3]})\
               .sort_index(axis=1)

#                Market  Product Code  Value1  Value2
# 0  RemainingCustomers             1       4       1
# 1  RemainingCustomers             2       3       5
# 2  RemainingCustomers             3      16       9

说明

> df1 [cols] .subtract(df2 [cols] .add(df3 [cols]))仅对指定的列执行计算.
> assign(** {‘Market’:’RemainingCustomers’,’Product Code’:[1,2,3]})添加结果数据帧所需的额外列.
> sort_index(axis = 1)重新排序所需输出的列.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐