国家 | 制造商 | 分类 | 销售额(美元) |
---|---|---|---|
CA | AB | Y | 一百 |
TX | AB | Y | 五十 |
美国共计 | AB | Y | 两百 |
CA | CD | Z | 三十 |
TX | CD | Z | 六十 |
美国共计 | CD | Z | 一百 |
我使用的数据集看起来像上图:我有大多数州的州级数据和一个Total US级行。因为我缺少一些州,所以我尝试为每个制造商-类别组合创建新行,其中State =“All Other States”。Sales $列是Total US与我拥有的州的销售额之和之间的差值。请参阅下面我尝试实现的端点:
| 国家|制造商|分类|销售额(美元)|
| --------------|--------------|--------------|--------------|
| CA|AB|Y|一百|
| TX|AB|Y|五十|
| 美国共计|AB|Y|两百|
| 所有其他国家|AB|Y|五十|
| CA|CD|Z|三十|
| TX|CD|Z|六十|
| 美国共计|CD|Z|一百|
| 所有其他国家|CD|Z|10个|
这样的事情是否可能/如何在Python/Pandas中实现这一点?
谢谢!
3条答案
按热度按时间xtupzzrd1#
尝试下面的操作。对数据进行排序,以确保“所有其他状态”排在最后。之后,对数据进行分组,并从总数中减去“所有其他状态”中的值,然后将其添加到原始
df
中输出:
q3aa05252#
我的解决方案不是使用迭代,而是使用concat和groupby函数:首先,我将创建一个临时列('sales 2')来存储负数值,其中'State'!='Total US'
现在,我将创建一个名为“Others”的新数据框架,其中我将使用groupby对Manufacturer和Category进行分组,然后使用sum 2列对值求和。
然后我将添加一个新列到'Other' dataframe:
jaxagkaj3#
拟定脚本
输出
留言
如果要对其他列进行计算,请更改参数:
.loc[:, 'Sales $']
替换为.loc[:, ['Sales $', 'Units sold']]