この問題には、3つの別々のデータフレームが含まれています。df1は、「value1」、「value2」を含む製品1、2、3の「合計」を表します。df2は、「value1」、「value2」を含む製品1、2、3の「Customer1」を表します。df3は「Customer2」を表します。 'value1'、 'value2'を含む製品1、2、3の
df2とdf3は、基本的にdf1のサブセットです。
df1からdf2&df3を減算し、このdf4にラベルを付ける別のデータフレームを作成したいと思います。df4を「Market」列内の「残りの顧客」にしたい。
これは私がこれまでにしたことです
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)
これが1つの方法です:
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]
コメントを追加