在熊猫的特定细胞下求和?

时间:2020-08-10 02:06:36

标签: python pandas

我有一个看起来像这样的数据框,只有很大。这也是我必须每月运行一次的经常性问题的一部分,因此值将始终在变化:

| 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   |

基本上,我想根据类别和子组(朋友/家人)查看销售总数。我觉得我可以通过用上面的值替换空白单元格来走近一些,所以类别列已被填充,但是我不确定如何从那里继续。

我有什么想法或领域需要调查吗?

2 个答案:

答案 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()将为您提供每种categorygroup组合的销售总数。

答案 1 :(得分:0)

您的想法已接近答案。 首先,我们需要为每一行填充空白的Category单元格,并且可以通过保留先前的非空单元格内容轻松地做到这一点。

有两种方法可以做到这一点。

1。用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)

2。仅用fillna()

填充NA单元格

设置为ffillpad并沿轴0,fillna()会将前一行有效值复制到NA单元格中。

df.Category = df.Category.fillna(method='ffill')

您可以发现所有空白类别单元格都填充有值。 因此,您现在就可以轻松执行任何条件求和!