Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x pandas.groupby.apply中存在意外的输出格式_Python 3.x_Pandas - Fatal编程技术网

Python 3.x pandas.groupby.apply中存在意外的输出格式

Python 3.x pandas.groupby.apply中存在意外的输出格式,python-3.x,pandas,Python 3.x,Pandas,有人知道为什么我们在GROUPBY中用作BY的列只包含1个唯一值时熊猫的行为会有所不同吗?具体来说,如果只有1个值,我们返回pandas.Series,则返回的输出基本上与多个唯一值进行了转换: dt = pd.date_range('2021-01-01', '2021-01-02 23:00', closed=None, freq='1H') df = pd.DataFrame({'date':dt.date, 'vals': range(dt.shape[0])}, index=dt) d

有人知道为什么我们在GROUPBY中用作BY的列只包含1个唯一值时熊猫的行为会有所不同吗?具体来说,如果只有1个值,我们返回pandas.Series,则返回的输出基本上与多个唯一值进行了转换:

dt = pd.date_range('2021-01-01', '2021-01-02 23:00', closed=None, freq='1H')
df = pd.DataFrame({'date':dt.date, 'vals': range(dt.shape[0])}, index=dt)
dt1 = pd.date_range('2021-01-01', '2021-01-01 23:00', closed=None, freq='1H')
df2 = pd.DataFrame({'date':dt1.date, 'vals': range(dt1.shape[0])}, index=dt1)
def f(row, ):
    return row['vals']
print(df.groupby('date').apply(f).shape)
print(df2.groupby('date').apply(f).shape)
[out 1] (48,)
[out 2] (1, 24)
是否有一些简单的参数可以用来确保行为的一致性?由于不一致性,可能将其作为bug报告,或者它是“预期的”(我不理解前面的问题,有时糟糕的设计或小部件不是bug)?(我仍然喜欢熊猫,只是这些小东西会让它们的使用非常痛苦)

squere()
并且可以使形状一致:

>>df.groupby('date').apply(f).squeeze().shape
(48,)
>>>df2.groupby('date')。应用(f)。挤压()。形状
(24,)

squesh=True
(已弃用)
groupby()
有一个参数:

压缩
:尽可能减少返回类型的维数,否则返回一致的类型

df.groupby('date',squeak=True).apply(f).shape (48,) >>>groupby('date',squeak=True).apply(f).shape (24,)
这已被删除,将来也将被删除。

根据您的措辞,您似乎明确希望返回一个系列?否则,您可以返回一个数据帧(
返回行[['vals']]
),并且形状将是一致的。非常感谢您提供一致的替代方案!然而,它增加了子集的必要性,以获得与series相比的series和50%的开销:(我也不明白为什么使用series会产生不一致的行为…
groupby()
有一个参数,该参数将生成形状
(48,)
(24,)
,但显然是:
df2.groupby('date',squage=True).apply(f).shape
@tdy谢谢,这很好用,还有一个未弃用的版本:df.groupby('date')。apply(f).squeeze()唯一的问题是,如果您不熟悉它,您将不会期望出现这样的行为…很好,作为包括未弃用版本的答案添加