假设我有这样一个 Dataframe :
import pandas as pd
import numpy as np
data = [[5123, '2021-01-01 00:00:00', 'cash','sales$', 105],
[5123, '2021-01-01 00:00:00', 'cash','items', 20],
[5123, '2021-01-01 00:00:00', 'card','sales$', 355],
[5123, '2021-01-01 00:00:00', 'card','items', 50],
[5123, '2021-01-02 00:00:00', 'cash','sales$', np.nan],
[5123, '2021-01-02 00:00:00', 'cash','items', np.nan],
[5123, '2021-01-02 00:00:00', 'card','sales$', 170],
[5123, '2021-01-02 00:00:00', 'card','items', 35]]
columns = ['Store', 'Date', 'Payment Method', 'Attribute', 'Value']
df = pd.DataFrame(data = data, columns = columns)
| 商店|日期|付款方式|属性|价值|
| - ------|- ------|- ------|- ------|- ------|
| 小行星5123|2021年01月01日00时00分|现金|销售额|一百零五|
| 小行星5123|2021年01月01日00时00分|现金|项目|二十个|
| 小行星5123|2021年01月01日00时00分|卡片|销售额|三五五|
| 小行星5123|2021年01月01日00时00分|卡片|项目|五十|
| 小行星5123|2021年1月2日00时00分|现金|销售额|钠氮|
| 小行星5123|2021年1月2日00时00分|现金|项目|钠氮|
| 小行星5123|2021年1月2日00时00分|卡片|销售额|一百七十|
| 小行星5123|2021年1月2日00时00分|卡片|项目|三十五|
我想创建一个新的属性,称为"平均项目价格",它是通过,对于每个商店/日期/支付方式,销售额除以项目(例如,对于商店5123,2021 - 01 - 01,现金,我想创建一个新的行,属性称为"平均项目价格,"值等于5. 25).
我意识到我可以将这些数据透视出来,用一列表示销售额,一列表示商品,然后将这两列分开,然后重新堆叠,但是有没有更好的方法可以在不使用透视的情况下做到这一点呢?
| 商店|日期|付款方式|属性|价值|
| - ------|- ------|- ------|- ------|- ------|
| 小行星5123|2021年01月01日00时00分|现金|销售额|一百零五|
| 小行星5123|2021年01月01日00时00分|现金|项目|二十个|
| 小行星5123|2021年01月01日00时00分|现金|平均项目价格|五点二五|
| 小行星5123|2021年01月01日00时00分|卡片|销售额|三五五|
| 小行星5123|2021年01月01日00时00分|卡片|项目|五十|
| 小行星5123|2021年01月01日00时00分|卡片|平均项目价格|七、十|
| 小行星5123|2021年1月2日00时00分|现金|销售额|钠氮|
| 小行星5123|2021年1月2日00时00分|现金|项目|钠氮|
| 小行星5123|2021年1月2日00时00分|现金|平均项目价格|钠氮|
| 小行星5123|2021年1月2日00时00分|卡片|销售额|一百七十|
| 小行星5123|2021年1月2日00时00分|卡片|项目|三十五|
| 小行星5123|2021年1月2日00时00分|卡片|平均项目价格|四点八六|
4条答案
按热度按时间wr98u20j1#
您可以使用
pivot_table
来获得每组的销售额/项目的总和,然后使用原始数据计算平均值和merge
:输出:
连续
输出:
snvhrwxg2#
pivot
,然后在根据需要分配“属性”后append
:zfycwa2u3#
一种选择是设置索引,进行计算,然后使用分类值来获得与您的输出相匹配的排序输出:
wpx232ag4#
溶液1:
输出:
也可以使用pandasql: