在DataFrame中按组获取日期计数

时间:2018-12-06 02:33:34

标签: python pandas datetime time-series pandas-groupby

Date    Latitude    Longitude   Disaster
2011-01-10  56.79   89.90   Cyclonic Flood
2011-02-09  56.79   89.90   Cyclonic Flood
2010-11-20  34.08   69.92   Cyclonic Flood
2011-01-10  56.79   89.90   Earthquake
2010-12-19  67.78   155.35  Earthqauke
2010-12-19  66.78   125.35  Cyclonic Flood
2010-12-19  66.78   125.35  Earthqauke
2017-09-10  56.99   98.22   Cyclonic Flood
2017-09-10  56.99   98.22   Cyclonic Flood

Date的类型为date,我是时间序列相关问题的新手,因此给我带来了一些麻烦,因为我需要先按Latitude和{{1 }},然后计算该地区发生地震的天数(日期)。我尝试使用-

Longitude

任何人都可以确认或帮助我纠正这一点吗?

1 个答案:

答案 0 :(得分:0)

假设您的数据集在每个纬度/经度上包含多种灾难,则您尝试的代码将计算所有灾难日期(而不仅仅是地震)。

要仅计算地震日期,可以先过滤DataFrame,然后过滤DataFrame.groupby().count()。这是对“灾难”列中的数据进行一些修改的一种方法,以说明如果您的数据包含多种灾难类型的话,为什么如此重要:

import pandas as pd

data = [
    ['2011-01-10', 56.79, 89.90, 'Earthquake'],
    ['2011-02-09', 56.79, 89.90, 'Earthquake'],
    ['2010-11-20', 34.08, 69.92, 'Cyclonic Flood'],
    ['2010-12-19', 66.78, 125.35, 'Earthquake'],
    ['2017-09-10', 56.99, 98.22, 'Cyclonic Flood'],
    ['2017-09-10', 56.99, 98.22, 'Earthquake'],
    ]

df = pd.DataFrame(data, columns=['Date', 'Latitude', 'Longitude', 'Disaster'])

# filter the DataFrame, then group and count
filtered = df[df.Disaster == 'Earthquake']
grouped = filtered.groupby(['Latitude', 'Longitude', 'Disaster']).count()

print(grouped)
# OUTPUT
#                                Date
# Latitude Longitude Disaster        
# 56.79    89.90     Earthquake     2
# 56.99    98.22     Earthquake     1
# 66.78    125.35    Earthquake     1