python - 按一列对数据进行分组,并从其他两列中选择第一次出现的情况

标签 python pandas group-by

我需要使用customer进行.groupby(),然后为客户首次购买的日期添加一列,并添加另一列对应的购买金额。

这是我的代码。我做错了第一部分,不知道如何做第二部分。我尝试过 .loc.idxmin ....

mydata = [{'amount': 3200, 'close_date':'2013-03-31', 'customer': 'Customer 1',},
          {'amount': 1430, 'close_date':'2013-11-30', 'customer': 'Customer 1',},
          {'amount': 4320, 'close_date':'2014-03-31', 'customer': 'Customer 2',},
          {'amount': 2340, 'close_date':'2015-05-18', 'customer': 'Customer 2',},
          {'amount': 4320, 'close_date':'2015-06-29', 'customer': 'Customer 2',},]

df = pd.DataFrame(mydata)
df.close_date = pd.to_datetime(df.close_date)
df['first_date'] = df.groupby('customer')['close_date'].min().apply(lambda x: x.strftime('%Y-%m'))

最佳答案

如果您按 close_date 对数据进行排序,则可以执行以下操作:

df.sort_values('close_date').groupby(['customer'])['close_date', 'amount'].first()

           close_date  amount
customer                     
Customer 1 2013-03-31    3200
Customer 2 2014-03-31    4320

.sort_values() 已在 0.17 中添加,原为 sort() (see docs) .

关于python - 按一列对数据进行分组,并从其他两列中选择第一次出现的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34404712/

相关文章:

python - 监视数据的 TCP/IP 连接

python - pygame.错误: video system not initialized python code error

mysql - 使用max、group by、临时表和随机行选择的mysql查询结果的性能

mysql - 如何在不使用group by的情况下聚合数据

mysql - SQL通过对两列进行分组来选择最大值

python - 如何更改直方图中显示的轴范围

python - 使用 Selenium + Python 滚动到元素后的元素屏幕截图?

python - 使用链接的 "join"连接多个数据帧(而不是合并或连接)是否有效?

python - Pandas(python)中带有字典的部分 map ,返回属性错误

python - 获取分类变量的类别列表(Python Pandas)