【问题标题】:How do I generate multiple, separate lists while iterating over dataframe column如何在迭代数据框列时生成多个单独的列表
【发布时间】:2020-07-08 19:33:55
【问题描述】:

我正在使用一个数据框,该数据框有一列时间(格式为 YYYY/MM/DD/HH/MM/SS)和另一列风速 - 在几个月的过程中每秒收集一次。

我希望我的代码生成列表,将所有风速值分组到它们被拍摄的那一天。

day_number = 0
for index, row in df.iterrows():
  #NOTE: I only run the if clause on the first 78450 rows of data
  #because I get an error from the last line of code
  if index < 78450:
    if time[index][0:10] == time[index+1][0:10]:
      #[here I want to generate lists grouping my wind speed values]
    else:
      day_number += 1

有没有办法从单个 for 循环生成多个列表?或者是否有特定的 Pandas 函数可以做到这一点?

谢谢

【问题讨论】:

    标签: python arrays dataframe


    【解决方案1】:

    使用 datetime 和 timedelta 生成一组合成数据,因此将一些值分散在几天内:

    import datetime
    
    df = pd.DataFrame({'date':[datetime.datetime.now()+datetime.timedelta(x*.5) for x in range(10)], 'wind_speed':[x for x in range(10)]})
    

    df 看起来像:

        date                        wind_speed
    0   2020-07-08 15:42:11.399609  1
    1   2020-07-09 15:42:11.399609  2
    2   2020-07-10 15:42:11.399609  3
    3   2020-07-11 15:42:11.399609  4
    4   2020-07-12 15:42:11.399609  5
    5   2020-07-13 15:42:11.399609  6
    6   2020-07-14 15:42:11.399609  7
    7   2020-07-15 15:42:11.399609  8
    8   2020-07-16 15:42:11.399609  9
    9   2020-07-17 15:42:11.399609  10
    

    按年、月、日列分组并将列表应用于wind_speed

    df.groupby([df.date.dt.year, df.date.dt.month, df.date.dt.day])['wind_speed'].apply(list)
    

    输出

    date  date  date
    2020  7     8          [1]
                9       [2, 3]
                10      [4, 5]
                11      [6, 7]
                12      [8, 9]
                13        [10]
    

    摆脱多重索引

    df.index.set_names(['year','month','day'], inplace=True)
    df.reset_index()
    

    【讨论】:

    • 非常感谢!这看起来干净多了。
    猜你喜欢
    • 2019-03-25
    • 2018-08-22
    • 2021-07-10
    • 2016-07-16
    • 2015-11-09
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    • 2019-07-05
    相关资源
    最近更新 更多