python - 从不同列中提取值时在熊猫中分配新列时出现问题
问题描述
我在创建具有产品类别的平均折扣百分比的新列时遇到问题。我的数据框由带有订单的行组成。每个订单都有其 ID、商品名称、产品类别、购买月份、零售价和折扣价,我还在百分比列中添加了折扣。我想添加一个新列,其中包含每个类别的平均折扣。简单来说,我想知道家具中的产品平均打折了多少。然后,我想绘制前 3 个类别及其折扣随时间的变化,以查看是否存在季节性(我在考虑条形图)。
这是示例数据
data = {'level_0': ['Furniture', 'Jewllery','Watches', 'Footwear', 'Furniture', 'Watches'],
'Discount_in_%': ['0.6', '.2', '0.3', '0.8', '0.7', '0.1']}
data = pd.DataFrame (data, columns = ['level_0','Discount_in_%'])
data
我的问题是生成每个类别的平均折扣列。我正在尝试使用groupby()
,但我得到了一列 NaN
df['discount_in_%'] = 1 - df['discounted_price']/df['retail_price']
df['mean_discount_cat'] = df.groupby('level_0')['discount_in_%'].sum()/len(df)
df['mean_discount_cat']
#level_0 is the main category column
0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
..
19995 NaN
19996 NaN
19997 NaN
19998 NaN
19999 NaN
我尝试将其总结起来,然后按长度除以,因为当我使用时,mean()
我也得到了 NaN。你能指导我如何解决这个问题吗?此外,我不确定如何仅绘制前 3 个类别的平均折扣,但这可能是另一个问题。
我真的很感谢你的帮助。谢谢!
解决方案
这里有几个问题。
- 初始化数据框。你所拥有的并不完全正确。它混合了两种不同的初始化方式。如果您命名数据中的列,则不会将列参数传递到初始化中。见https://www.geeksforgeeks.org/different-ways-to-create-pandas-dataframe/
data = {'level_0': ['Furniture', 'Jewllery','Watches', 'Footwear', 'Furniture', 'Watches'], 'discount_in_%': [0.6, .2, 0.3, 0.8, 0.7, 0.1]} df = pd.DataFrame (data)
现在你有了一个合适的数据框。
- group by 不太对。groupby 函数返回一个特殊对象,该对象需要一个聚合函数(不是列地址)来产生结果:
print(df.groupby('level_0').sum())
- 将结果除以 len(df) 没有多大意义。如果您在一个类别中有 1 件商品有 5% 的折扣,那么将其除以整个数据框中的 100 件商品会达到什么效果?我猜你正在寻找
打印(df.groupby('level_0').mean())
推荐阅读
- javascript - 如何将变量分配给对象以使用 reactjs 提交数据?
- java - Gradle + AspectJ 日志跟踪在“检测”期间尝试重新编译项目并失败
- r - R中“arrayInd()”的逆是什么?
- flutter - 使用 fl_chart 包在线性图表中绘制底部标题时导致错误的原因
- node.js - 将 Azure Text to Speech 输出加载到 Azure Blob
- php - 如何检查 YouTube 上是否存在频道?
- linux - 如何解决 aws ec2“statuscheckfailed”问题?
- ios - 我可以在枚举(Swift)中将字符串数组保留为大小写的 RawValue 吗?
- php - Why Laravel Pusher is not working in server
- javascript - React: Is it ok to check cookies for refresh token?