【发布时间】:2013-12-10 22:18:19
【问题描述】:
[编辑以更清楚地说明根本问题,如果您使用 numpy 1.8,其行为会有所不同,正如 dmvianna 指出的那样]
我有一个带有时间戳的 DataFrame 添加其他数据。最后,我不想使用格式化时间作为索引,因为它与 matplotlibs 3d 绘图相混淆。我还想执行一个 groupby 来填充一些标志字段。这导致我遇到了一些奇怪的错误。前两个工作如我所料。一旦我将pd.to_datetime 带入图片,它就会开始抛出错误。
按预期运行:
import pandas as pd
import numpy as np
df = pd.DataFrame({'time':np.random.randint(100000, size=1000),
'type':np.random.randint(10, size=1000),
'value':np.random.rand(1000)})
df['high'] = 0
def high_low(group):
if group.value.mean() > .5:
group.high = 1
return group
grouped = df.groupby('type')
df = grouped.apply(high_low)
工作正常:
df = pd.DataFrame({'time':np.random.randint(100000, size=1000),
'type':np.random.randint(10, size=1000),
'value':np.random.rand(1000)})
df.time = pd.to_datetime(df.time, unit='s')
df['high'] = 0
def high_low(group):
if group.value.mean() > .5:
group.high = 1
return group
grouped = df.groupby('type')
df = grouped.apply(high_low)
抛出错误:
ValueError: Shape of passed values is (3, 1016), indices imply (3, 1000)
df = pd.DataFrame({'time':np.random.randint(100000, size=1000),
'type':np.random.randint(10, size=1000),
'value':np.random.rand(1000)})
df.time = pd.to_datetime(df.time, unit='s')
df = df.set_index('time')
df['high'] = 0
def high_low(group):
if group.value.mean() > .5:
group.high = 1
return group
grouped = df.groupby('type')
df = grouped.apply(high_low)
抛出错误:
ValueError: Shape of passed values is (3, 1016), indices imply (3, 1000)
df = pd.DataFrame({'time':np.random.randint(100000, size=1000),
'type':np.random.randint(10, size=1000),
'value':np.random.rand(1000)})
df['epoch'] = df.time
df.time = pd.to_datetime(df.time, unit='s')
df = df.set_index('time')
df = df.set_index('epoch')
df['high'] = 0
def high_low(group):
if group.value.mean() > .5:
group.high = 1
return group
grouped = df.groupby('type')
df = grouped.apply(high_low)
有人知道我错过了什么/做错了吗?
【问题讨论】:
-
您可能希望使用示例数据、预期输出以及更清晰地说明问题的确切内容来重写您的问题。
-
你说你的groupby失败了,什么groupby??
-
在此之后我调用:
data.groupby(['source', 'DoY']),这会消除我给出的错误。我将进行编辑以使其清楚。 -
@TristanMatthews 我不明白 dmvianna 的回答是如何解决这个问题的。
-
@AndyHayden 它回答了我的问题,即如何将我想要的数据添加到我的 DataFrame 而不复制它并且可能会弄乱顺序。我仍然不确定为什么
groupby/apply在我以一种方式而不是另一种方式时会失败,但解决更一般的问题似乎更容易。