【问题标题】:Pandas compare values by dates熊猫按日期比较值
【发布时间】:2020-04-26 18:34:21
【问题描述】:

我有一个类似的数据

Date, Name, Something
2020-04-01,John,10
2020-04-01,Ivory,5
2020-04-01,Sam,3
2020-04-02,John,5
2020-04-02,Ivory,2
2020-04-02,Sam,1
2020-04-02,John,20
2020-04-02,Ivory,3
2020-04-02,Sam,9

与熊猫合作,我想按名称比较昨天的值,与今天的结果来获得增加,减少。 shift(3) 不起作用,因为每天的名称数量不同。 我该怎么做。我想添加以前的号码。我试过了

df['old_data'] = df[(work['Name'] == df['Name']) & (df['Date'] ==
                                                                 (df['Date'] - pd.Timedelta(days = 1))
                                                                 )]['Something']

但是没有用。

【问题讨论】:

  • df.groupby('name')['Something'].diff()?
  • 你的预期输出是什么?
  • 2020-04-02,Sam,9,1

标签: python pandas date compare


【解决方案1】:

试试这个:

import pandas as pd


df = pd.DataFrame({'Date': {0:'2020-04-01', 1:'2020-04-01', 2:'2020-04-01', 
                             3:'2020-04-02', 4:'2020-04-02', 5:'2020-04-02', 
                             6:'2020-04-03', 7:'2020-04-03', 8:'2020-04-03'},
                    'Name': {0:'John', 1:'Ivory', 2:'Sam', 
                             3:'John', 4:'Ivory', 5:'Sam', 
                             6:'John', 7:'Ivory', 8:'Sam'},
                    'Something': {0:10, 1:5, 2:3, 
                                  3:5, 4:2, 5:1, 
                                  6:20, 7:3, 8:9}})

df['diff'] = df.groupby('Name')['Something'].diff()

df.dropna()

我通过将最后三个日期更改为“2020-04-03”来更改您的数据。

【讨论】:

  • 还有一个问题。在这种情况下,如何获得每个名称的最大值
  • 将 diff() 替换为 max()
  • 不起作用。它为每个用户返回一个具有最大值的对象,而不是一个值。所以在表中新行总是0。
  • 如果您想报告每个名称的Something 的最大值,并将其添加为一列,以便该名称的每一行重复最大值,请执行以下操作:df['max_Something'] = df.groupby(['Name'])['Something'].transform(max)跨度>
猜你喜欢
  • 2020-10-01
  • 1970-01-01
  • 2016-10-01
  • 1970-01-01
  • 2020-10-02
  • 1970-01-01
  • 2017-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多