基于最新日期获取字符串值的最后一次出现
这里有三列数据,分别是:商品、商品类型和销售额。商品类型经常会变化。有时候,比如说“苹果”,在某个特定日期(比如1月1日)它的类型是“健康”,但在另一个日期(比如1月5日)它的类型可能就变成了“素食”。这样的商品有超过500个。
例如,数据框的样子如下:
商品 | 商品类型 | 日期 | 销售额 |
---|---|---|---|
苹果 | 健康 | 1月1日 | 10 |
苹果 | 素食 | 1月5日 | 5 |
我们需要的输出结果是:
商品 | 商品类型 | 销售额 |
---|---|---|
苹果 | 素食 | 15 |
(假设“素食”是数据中的最后一条记录),而总销售额是15。
现在如果在1月7日又添加了一条记录(苹果,水果,2),那么输出结果就会变成:
例如,数据框的样子如下:
商品 | 商品类型 | 日期 | 销售额 |
---|---|---|---|
苹果 | 健康 | 1月1日 | 10 |
苹果 | 素食 | 1月5日 | 5 |
苹果 | 水果 | 1月7日 | 2 |
所需的输出结果是:
商品 | 商品类型 | 销售额 |
---|---|---|
苹果 | 水果 | 17 |
我尝试使用 df.groupby
.last
函数,但它只适用于数字数据。
1 个回答
0
在这种情况下,使用groupby的last函数应该是有效的,只要你能确认你的数据是按时间顺序输入的,你可以直接这样做:
import pandas
df = pandas.DataFrame(columns=['item', 'type', 'date', 'sales'])
df.loc[0] = ["Apple", "unripe", "Jan 1", 10]
df.loc[1] = ["Apple", "ripe", "Jan 10", 5]
df.loc[2] = ["Orange", "ripe", "Jan 12", 6]
df.groupby(["item"]).agg({'type': 'last', 'date': 'last', 'sales': sum})
这个groupby确保使用的是最新的日期和类型,而销售额则是所有分组条目的总和。
输出结果看起来像这样:
type date sales
item
Apple ripe Jan 10 15
Orange ripe Jan 12 6