Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从不同列中提取值时,在pandas中指定新列时出现问题_Python_Pandas_Dataframe - Fatal编程技术网

Python 从不同列中提取值时,在pandas中指定新列时出现问题

Python 从不同列中提取值时,在pandas中指定新列时出现问题,python,pandas,dataframe,Python,Pandas,Dataframe,我在创建一个产品类别的平均折扣百分比的新列时遇到问题。我的数据框由带订单的行组成。每个订单都有其id、商品名称、产品类别、购买月份、零售价和折扣价,我还在百分比列中添加了折扣。我想添加一个新列,其中包括每个类别的平均折扣。简单地说,我想知道家具的产品平均折扣多少。然后,我想画出前3个类别的折扣随时间的推移,看看是否有季节性(我想的是酒吧图) 这就是示例数据 data = {'level_0': ['Furniture', 'Jewllery','Watches', 'Footwear', 'F

我在创建一个产品类别的平均折扣百分比的新列时遇到问题。我的数据框由带订单的行组成。每个订单都有其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()
,但我得到了一列sull的NaNs

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。 你能告诉我怎么修理这个吗?此外,我不知道如何绘制出前三大类别的平均折扣,但这可能是另一个问题

我非常感谢你的帮助。
谢谢大家!

这里有几个问题

  • 初始化数据帧。你所拥有的并不完全正确。它混合了两种不同的初始化方式。如果在数据中命名列,则不会将列参数传递到初始化中。看
  • 现在您有了一个正确的数据帧

  • 分组方式不太正确。groupby函数返回一个特殊对象,该对象需要聚合函数(而不是列地址)来生成结果:
  • 将结果除以len(df)没有多大意义。如果一个类别中有1个项目有5%的折扣,那么将其除以整个数据帧中的100个项目可以实现什么?我猜你在找
  • 打印(df.groupby('level_0').mean())


    非常感谢。我的问题是
    df.groupby('level_0').mean()
    不按降序对值进行排序,所以我不知道哪些类别折扣最多。此外,我需要为每个类别找到一个平均值,而不是每个项目。这是我不知道如何实现的事情。当我使用
    df.groupby('level_0').agg('mean')
    时,我在整个专栏中仍然只得到了NaN。groupby().mean()将完全满足您的要求-每个类别的平均值。这相当于在SQL中按类别从tbl组中选择类别、平均值(col)您可以在生成结果后对其进行排序。您需要发布工作(尽管不正确)代码,以便我们了解哪些工作方式不符合您的要求。发布的代码不太有效。但是我能得到同一类别中所有值的平均值吗?请注意,一个类别在多行中重复,我需要每个类别的一个平均值。
    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)
    
    print(df.groupby('level_0').sum())