【问题标题】:groupby and for loop with pandas使用熊猫的 groupby 和 for 循环
【发布时间】:2018-08-10 02:43:43
【问题描述】:

我是python3的新手,几个月前我是R用户。
这就是问题所在。
我的数据框(df1)有点像这样:

   Date         quarter        number
2015-10-09          1           250
2015-10-09          2           400
2015-10-09          3           310
2015-10-10          1           300
2015-10-10          2           410
2015-10-10          3           280
    .               .            .
    .               .            .

数据超过5000。上图只有几行。
我想要的是每天季度之间的绝对差异数字。
我想要的结果数据框应该如下图所示:

   Date          absolute_interval
2015-10-09            150
2015-10-09            90
2015-10-10            110
2015-10-10            130
    .                 .            
    .                 .         

我尝试使用 df2=df1.groupby('Date')
然后我想申请循环。
我的伪代码是

for k in df2:
    for u in df2[k]:

但我认为这行不通,所以我目前被困在这里。
有什么解决办法吗??
谢谢,祝你有美好的一天。

【问题讨论】:

  • df.diff 不起作用吗?
  • 用 R 你可以做到df%>%group_by(Date)%>%mutate(c(NA,abs(diff(number))))%>%na.omit()
  • 是的,但我正在尝试学习 python 语法。
  • @BallpointBen 我不知道 df.diff 存在....我会尝试 thx。

标签: python-3.x for-loop pandas-groupby


【解决方案1】:
 pd.concat([df.Date,df.groupby('Date').number.diff().abs()],axis=1).dropna()
Out[608]: 
         Date  number
1  2015-10-09   150.0
2  2015-10-09    90.0
4  2015-10-10   110.0
5  2015-10-10   130.0

你也可以这样做:

pd.DataFrame(df.groupby('Date').apply(lambda x: abs(x['number']-x['number'].shift(1))).dropna())

              number
Date                
2015-10-09 1   150.0
           2    90.0
2015-10-10 4   110.0
           5   130.0

如果需要,可以在末尾添加.reset_index()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 1970-01-01
    • 2022-07-18
    • 2013-10-03
    • 1970-01-01
    • 2021-06-08
    • 2022-01-08
    相关资源
    最近更新 更多