【发布时间】:2018-01-16 11:42:26
【问题描述】:
Versions:
* Pandas 0.21.0
* Python 2.7.12
我在 Pandas 中看到了这种奇怪的行为:根据数据框和排序,groupby 返回不同的结果:
import pandas as pd
from datetime import datetime
df1 = pd.DataFrame({'dtime': [datetime(2017,1,1,1,5), datetime(2017,1,1,1,20)],
'val1': [11, None],
'val2': [None, 31]
})
df2 = pd.DataFrame({'dtime': [datetime(2017,1,1,1,5), datetime(2017,1,1,1,20)],
'val1': [11, None],
'val2': [31, None]
})
df1b = df1.melt("dtime").dropna().set_index("dtime")
df2b = df2.melt("dtime").dropna().set_index("dtime")
r1a = df1b.groupby(pd.Grouper(freq="1h")).value.apply(lambda x: x.sort_values(ascending=True))
r1b = df1b.groupby(pd.Grouper(freq="1h")).value.apply(lambda x: x.sort_values(ascending=False))
r2a = df2b.groupby(pd.Grouper(freq="1h")).value.apply(lambda x: x.sort_values(ascending=True))
r2b = df2b.groupby(pd.Grouper(freq="1h")).value.apply(lambda x: x.sort_values(ascending=False))
print "\n--- df1 ascending sort ---------------\n", r1a
print "\n--- df1 descending sort SHOULD IT ALWAYS BE LIKE THIS? --------------\n", r1b
print "\n--- df2 ascending sort ---------------\n", r2a
print "\n--- df2 descending sort --------------\n", r2b
返回
--- df1 ascending sort ---------------
dtime
2017-01-01 01:05:00 11.0
2017-01-01 01:20:00 31.0
Name: value, dtype: float64
--- df1 descending sort SHOULD IT ALWAYS BE LIKE THIS? --------------
dtime dtime
2017-01-01 01:00:00 2017-01-01 01:20:00 31.0
2017-01-01 01:05:00 11.0
Name: value, dtype: float64
--- df2 ascending sort ---------------
dtime
2017-01-01 01:05:00 11.0
2017-01-01 01:05:00 31.0
Name: value, dtype: float64
--- df2 descending sort --------------
dtime
2017-01-01 01:05:00 31.0
2017-01-01 01:05:00 11.0
Name: value, dtype: float64
为什么df1 descending sort 返回分组的参考时间(2017-01-01 01:00:00),而在其他组中却没有?
我希望所有分组都将参考时间作为多索引返回,无一例外。
我在github pandas #18908 创建了一个问题,但在一个月内没有任何有用的答案。我想了解这只是一个演示问题还是一个可能的错误。 我错过了什么吗?
【问题讨论】:
-
您使用的是哪个版本的 Pandas 和 Python,以防在验证时有所不同?
-
当然,这可能很重要:Python 2.7.12 和 Pandas 0.21.0
-
这真的很奇怪,更可能是一个错误
-
我是否正确地假设我们应该总是读取一个多索引(分组参考时间 + dtime),就像在
df1 descending中一样?我很奇怪没有在结果中阅读它,因为这是我对数据进行分组的主要原因......