【问题标题】:How to sum values in a column using conditional statements of other columns in a pandas dataframe?如何使用熊猫数据框中其他列的条件语句对列中的值求和?
【发布时间】:2019-04-05 15:23:25
【问题描述】:

我有一个包含 5 列和 25552 行的数据框。数据框结构如下:

mydf.head(4)

station       date         Lat    Lon       prcp
USC00397992   1998-10-01   44.26  -99.44    0.5
USC00397993   1998-10-01   44.01  -100.35   1.2
USC00397994   1998-10-01   45.65  -97.12    1.1
USC00397995   1998-10-01   43.90  -99.52    0.7

station 列中有许多不同的电台,date 列的日期范围为 1998-10-01 到 1999-06-30。此外,每个不同的车站都有不同的纬度和经度。 prcp 列是各个日期的降水记录。现在我想找到从 1999-05-01 到 1999-05-07 的每个 station 日期范围的 prcp 值的总和。我想要这样的输出:

station       Lat      Lon     sum_from_May1_to_May7
 USC00397992  44.26  -99.44       2.5 (for instance)
  .             .       .           .
  .             .       .           .

  .  

【问题讨论】:

  • 既然您使用了标签groupby,这意味着您知道它的存在。你用groupby做了什么?
  • @Yuca 我可以使用 groupby 从站列中选择不同的站,但我无法根据需要破解日期列。
  • @ychaulagain 您可能只接受一个答案作为已接受的答案;)我注意到您一直在来回讨论这个问题。

标签: python python-3.x pandas dataframe pandas-groupby


【解决方案1】:

如果您不想对 lat long 进行分组:

df[(df['date']>pd.Timestamp(1995,5,1)) & (df['date']<pd.Timestamp(1995,5,7))]\
     .groupby('station').agg({'prcp':'sum', 'Lat' :'first', 'Lon' :'first'})

【讨论】:

    【解决方案2】:

    首先过滤你的数据框

    df2 = df.loc[(df.date >= '1999-05-01') & (df.date <= '1999-05-07)]
    

    那就直截了当

    df2.groupby('station').prcp.sum()
    

    如果您不想将不同的 LatLon 组合在一起,那么

    df2.groupby(['station', 'Lat', 'Lon']).prcp.sum()
    

    【讨论】:

      猜你喜欢
      • 2020-11-12
      • 2019-07-25
      • 1970-01-01
      • 1970-01-01
      • 2019-03-28
      • 1970-01-01
      • 1970-01-01
      • 2020-10-21
      • 2017-10-16
      相关资源
      最近更新 更多