我有一个包含变量(t_seg_size)的数据框,我想将该变量分段为偶数段,例如0-1000000,1000001-2000000等)然后生成每个段的汇总统计信息。
我正在使用的方法是以适当大小的块迭代数据帧,然后生成统计信息,例如.std()。
以下是代码:
for x in range (1000000, 200000000, 1000000):
print(df3[(x-999999 < df3["t_seg_size"] < x)].t_seg_size.std())
因此循环应该在(1)和(1000000)之间寻找t_seg_size并生成标准偏差。但是,我收到以下错误:
ValueError Traceback (most recent call last)
<ipython-input-65-ee3e9911be81> in <module>()
2 #df3[df3["t_seg_size"] > 2000000].describe()
3 for x in range (1000000, 200000000, 1000000):
----> 4 print(df3[(1000000 < df3["t_seg_size"] < x)].t_seg_size.std())
C:\Users\xxxx\AppData\Local\Continuum\Anaconda3\lib\site- packages\pandas\core\generic.py in __nonzero__(self)
696 raise ValueError("The truth value of a {0} is ambiguous. "
697 "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
--> 698 .format(self.__class__.__name__))
699
700 __bool__ = __nonzero__
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
非常感谢任何帮助。
答案 0 :(得分:2)
这一行中的错误:
print(df3[(x-999999 < df3["t_seg_size"] < x)].t_seg_size.std())
是因为将标量与数组进行比较变得模棱两可,因为如果只有一个匹配或除了一个匹配之外的所有匹配应该是True
?要正确执行此操作,您需要使用按位数组运算符&
,|
~
进行and
or
和not
比较,以便现在变为:
print(df3[(df3["t_seg_size"] >= x-999999) & (df3["t_seg_size"] < x)].t_seg_size.std())
由于运算符优先级,需要使用括号。
老实说你正在做什么看起来对我很好,不知道你想要存储统计数据的位置,但你可以将它添加到列表中,从中创建一个系列/ df并绘制它:
stats={'range':[], 'std':[]}
for x in range (1000000, 200000000, 1000000):
print(df3[(df3["t_seg_size"] >= x-999999) & (df3["t_seg_size"] < x)].t_seg_size.std())
stats['range'].append(x)
stats['std'].append(df3[(df3["t_seg_size"] >= x-999999) & (df3["t_seg_size"] < x)].t_seg_size.std())
您应该可以使用pd.DataFrame(stats).plot()
答案 1 :(得分:0)
您的问题看起来与this one非常相似。 尝试numpy.logical_and它应该解决问题。
for x in range (1000000, 200000000, 1000000):
print(df3[logical_and(df3["t_seg_size"] > x-999999, df3["t_seg_size"] < x)].t_seg_size.std())
答案 2 :(得分:0)
这里有一个使用groupby
的建议,应该会让它快得多:
grouped = df.groupby((df.t_seg_size / 1000000).round())
grouped.t_seg_size.std()
这将在一小部分时间内为您提供DataFrame中每个细分的标准偏差。另一个优点是,在完成分组后,您可以在grouped
上调用许多其他函数,例如均值,中位数等。
您可以轻松地在结果上绘制调用.plot
的结果。