panda合并/重排/求和单个数据帧



我有以下数据帧:

latitude    longitude   d1  d2  ar  merge_time
0   15  10.0    12/1/1981 0:00  12/4/1981 3:00  2.317681391 1981-12-04 04:00:00
1   15  10.1    12/1/1981 0:00  12/1/1981 3:00  2.293604127 1981-12-01 04:00:00
2   15  10.2    12/1/1981 0:00  12/1/1981 2:00  2.264552161 1981-12-01 03:00:00
3   15  10.3    12/1/1981 0:00  12/4/1981 2:00  2.278556423 1981-12-04 03:00:00
4   15  10.1    12/1/1981 4:00  12/1/1981 22:00 2.168275766 1981-12-01 23:00:00
5   15  10.2    12/1/1981 3:00  12/1/1981 21:00 2.114636628 1981-12-01 22:00:00
6   15  10.4    12/1/1981 0:00  12/2/1981 17:00 1.384415903 1981-12-02 18:00:00
7   15  10.1    12/2/1981 8:00  12/2/1981 11:00 2.293604127 1981-12-01 12:00:00

我想根据以下标准对上面的数据帧(列ar的值(进行分组和重新排列:

1.值latitudelongitude相等并且

2.值d2merge_time在分组为1的中相等

以下是所需输出:

latitude    longitude   d1  d2  ar
15  10  12/1/1981 0:00  12/4/1981 3:00  2.317681391
15  10.1    12/1/1981 0:00  12/1/1981 22:00 4.461879893
15  10.2    12/1/1981 0:00  12/1/1981 21:00 4.379188789
15  10.3    12/1/1981 0:00  12/4/1981 2:00  2.278556423
15  10.4    12/1/1981 0:00  12/2/1981 17:00 1.384415903
15  10.1    12/2/1981 8:00  12/2/1981 11:00 2.293604127

我怎样才能做到这一点?任何帮助都是值得的。

  • 在评论中表达您的要求后
    • 按位置分组(经度&纬度(
    • 在此分组中查找时间上连续的行
    • 对这些连续部分进行分组和聚合
import io
import pandas as pd
df = pd.read_csv(io.StringIO("""    latitude    longitude   d1  d2  ar  merge_time
0   15  10.0    12/1/1981 0:00  12/4/1981 3:00  2.317681391  1981-12-04 04:00:00
1   15  10.1    12/1/1981 0:00  12/1/1981 3:00  2.293604127  1981-12-01 04:00:00
2   15  10.2    12/1/1981 0:00  12/1/1981 2:00  2.264552161  1981-12-01 03:00:00
3   15  10.3    12/1/1981 0:00  12/4/1981 2:00  2.278556423  1981-12-04 03:00:00
4   15  10.1    12/1/1981 4:00  12/1/1981 22:00  2.168275766  1981-12-01 23:00:00
5   15  10.2    12/1/1981 3:00  12/1/1981 21:00  2.114636628  1981-12-01 22:00:00
6   15  10.4    12/1/1981 0:00  12/2/1981 17:00  1.384415903  1981-12-02 18:00:00
7   15  10.1    12/2/1981 8:00  12/2/1981 11:00  2.293604127  1981-12-01 12:00:00"""), sep="ss+", engine="python")
df = df.assign(**{c:pd.to_datetime(df[c]) for c in ["d1","d2","merge_time"]})
df.groupby(["latitude", "longitude"]).apply(
lambda d: d.groupby(
(d["d1"] != (d["d2"].shift() + pd.Timedelta("1H"))).cumsum(), as_index=False
).agg({"d1": "min", "d2": "max", "ar": "sum"})
).droplevel(2,0).reset_index()

输出

>
015101981-12-04 03:00:002.31768
1231545

相关内容

  • 没有找到相关文章

最新更新