【发布时间】:2021-03-31 17:23:25
【问题描述】:
我正在研究一个可以让我评估各种客户行为的数据集。为此,我将几个 excel 文件读入列表,然后将它们连接到单个数据帧中。不过,在此步骤之前,我想在每个列中创建几个新列,以根据年份和产品汇总收入,类似于以下内容:
输入数据
| |Year |Customer |Product |PO |Revenue |
| |:--------|:--------|:--------|:--------|:--------|
|0| 2019 | Cust 1 | DIGITAL | P1 | 100 |
|1| 2020 | Cust 1 | DIGITAL | P2 | 120 |
|2| 2019 | Cust 2 | STORE | P3 | 240 |
|3| 2019 | Cust 1 | DIGITAL | P4 | 200 |
|4| 2019 | Cust 2 | DIGITAL | P5 | 110 |
|5| 2020 | Cust 2 | STORE | P6 | 100 |
|6| 2020 | Cust 3 | DIGITAL | P7 | 120 |
|7| 2020 | Cust 3 | STORE | P8 | 180 |
期望的输出
| |Year |Customer |Product |PO |Revenue |19 Total |20 Total |19 Dig |20 Dig |19 Store |20 Store
| |:--------|:--------|:--------|:--------|:--------|:--------|:--------|:--------|:--------|:--------|:--------
|0| 2019 | Cust 1 | DIGITAL | P1 | 100 | 100 | | 100 | | |
|1| 2020 | Cust 1 | DIGITAL | P2 | 120 | | 120 | | 120 | |
|2| 2019 | Cust 2 | STORE | P3 | 240 | 240 | | | | 240 |
|3| 2019 | Cust 1 | DIGITAL | P4 | 200 | 200 | | 200 | | |
|4| 2019 | Cust 2 | DIGITAL | P5 | 110 | 110 | | 110 | | |
|5| 2020 | Cust 2 | STORE | P6 | 100 | | 100 | | | | 100
|6| 2020 | Cust 3 | DIGITAL | P7 | 120 | | 120 | | 120 | |
|7| 2020 | Cust 3 | STORE | P8 | 180 | | 180 | | | | 180 |
所以基本上每年都会有其年度总额,以及产品类别下的收入金额。注意,现在需要保持列或行的顺序。
您能提供的任何帮助都会很棒 - 如果有任何不妥之处,请告诉我。
编辑 在处理几个选项时,我发现下面的代码有效,但如果有人能提供帮助,我相信有一种更简洁的方式来编写它?
df_2019 = df.loc[df['Year'] == 2019]
df_2020 = df.loc[df['Year'] == 2020]
df_list = [df_2019, df_2020]
for i in df_list:
i[str(i['Year'].min())+' Total Rev'] = i['Revenue']
i[str(i['Year'].min())+' Dig Rev'] = i.loc[i['Product'] == 'DIGITAL', 'Revenue']
i[str(i['Year'].min())+' Store Rev'] = i.loc[i['Product'] == 'STORE', 'Revenue']
df_combined = pd.concat(df_list).sort_index()
df_combined
【问题讨论】: