我有一个看起来像这样的数据框,只有很大。这也是我必须每月运行一次的经常性问题的一部分,因此值将始终在变化:
| Name | Category | Sales|
|-----------|----------|------|
| Product 1 | Sports | 50 |
| Friends | | 30 |
| Family | | 20 |
| Product 2 | Sports | 50 |
| Friends | | 30 |
| Family | | 20 |
| Product 3 | Politics | 50 |
| Friends | | 30 |
| Family | | 20 |
基本上,我想根据类别和子组(朋友/家人)查看销售总数。我觉得我可以通过用上面的值替换空白单元格来走近一些,所以类别列已被填充,但是我不确定如何从那里继续。
我有什么想法或领域需要调查吗?
答案 0 :(得分:1)
使用数据帧最困难的部分之一是使数据具有正确的格式。代表在熊猫中工作的数据的最佳方法可能是这样的:
| product | group | category | sales |
| :-------|--------:|----------|-------|
| 1 | friends | sports | 30 |
| 1 | family | sports | 20 |
| 2 | friends | sports | 30 |
| 2 | family | sports | 20 |
| 3 | friends | politics | 30 |
| 3 | family | politics | 20 |
这将每行放置一项,并消除了重复信息。
以这种格式表示数据后,我建议使用Pandas的groupby function:
df.groupby(['category', 'group']).sales.sum()
将为您提供每种category
和group
组合的销售总数。
答案 1 :(得分:0)
您的想法已接近答案。
首先,我们需要为每一行填充空白的Category
单元格,并且可以通过保留先前的非空单元格内容轻松地做到这一点。
有两种方法可以做到这一点。
apply()
您可以使用数据框的apply()
函数将新值分配给列。
prev_category = None
def follow_previous_nonempty_row(category):
global prev_category
if category:
prev_category = category
return category
else:
return prev_category
df.Category = df.Category.apply(follow_previous_nonempty_row)
fillna()
设置为ffill
或pad
并沿轴0,fillna()
会将前一行有效值复制到NA单元格中。
df.Category = df.Category.fillna(method='ffill')
您可以发现所有空白类别单元格都填充有值。 因此,您现在就可以轻松执行任何条件求和!