【问题标题】:How does pandas groupby() function makes a difference in this code?pandas groupby() 函数对这段代码有何影响?
【发布时间】:2020-11-29 11:27:49
【问题描述】:
   import pandas as pd
   data = {'Company':['GOOG','MSFT','FB','GOOG','MSFT','FB'],
       'Dates':["1970-01-01 01:00:00","1970-01-01 01:00:02","1970-01-01 01:00:03","1970-01-01 01:00:04","1970-01-01 01:00:05","1970-01-01 01:00:06"]}
   df = pd.DataFrame(data)
   df["Sales"]=pd.to_datetime(df["Sales"])
   df.Sales.diff().dt.total_seconds()/3600

这段代码给了我输出

   0         NaN
   1    0.000556
   2    0.000278
   3    0.000278
   4    0.000278
   5    0.000278
   Name: Sales, dtype: float64

和

df.groupby("Company").Sales.diff().dt.total_seconds()/3600

这给了我输出

   0         NaN
   1         NaN
   2         NaN
   3    0.001111
   4    0.000833
   5    0.000833
   Name: Sales, dtype: float64

你能解释一下 groupby 函数在这里做什么吗?

【问题讨论】:

  • groupby 按公司拆分 datdaframe,得到每个公司的不同
  • 使用.groups 是一种查看方式。从您的示例中,这将起作用:df.groupby("Company").Sales.groups

标签: python python-3.x pandas numpy data-science


【解决方案1】:

之所以,你有三个NaN,因为你在df中有三个不同的公司名称,所以当我们做groupby时,它会将数据框分成3个,然后为每个人做diff ,然后concat返回结果

详情:

df["Dates"] = pd.to_datetime(df["Dates"])
    ...: 
for x , y in df.groupby('Company'):
    ...:     print(y)
    ...:     print(y['Dates'].diff().dt.total_seconds())
    ...:     
  Company               Dates
2      FB 1970-01-01 01:00:03
5      FB 1970-01-01 01:00:06
2    NaN
5    3.0
Name: Dates, dtype: float64
  Company               Dates
0    GOOG 1970-01-01 01:00:00
3    GOOG 1970-01-01 01:00:04
0    NaN
3    4.0
Name: Dates, dtype: float64
  Company               Dates
1    MSFT 1970-01-01 01:00:02
4    MSFT 1970-01-01 01:00:05
1    NaN
4    3.0
Name: Dates, dtype: float64

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 2015-02-08
    相关资源
    最近更新 更多