python - 使用 linregress 的参数中使用的查询迭代分组
问题描述
我已按“过滤器”列对名为“full_df2”的数据框进行了分组。然后我将不同的“过滤器”组名放在一个名为“unique_list”的列表中。我想使用以下代码遍历我的数据框,以便我可以获得每个分组的图。'Rating' 和 'hhs' 是我将运行回归的数据框中的列。
当我运行下面的代码时,我得到了这个错误。ValueError: too many values to unpack (expected 4) 我尝试在第 2 行末尾添加 .split(',') ,但没有帮助。我一直在冲浪板试图克服这个错误。我是 Python 新手。因此,任何帮助和解释将不胜感激。
这是一些示例数据和我使用的真实代码。
full_df2 = np.array([['Letter', 'Sync', 'Status', 'filter', 'Rating', 'hhs'],
['A', 'And', 'Off', 'A And Off', .4, 300],
['A', 'And', 'On', 'A And On', .5, 300]
['A', 'Or', 'Off', 'A Or Off', .7, 300]
['A', 'Or', 'On', 'A Or On', .3, 300]
['A', 'Between', 'Off', 'A Between Off', .6, 300]
['A', 'Between', 'On', 'A Between On', .4, 300]
['A', 'And', 'Off', 'A And Off', .6, 400],
['A', 'And', 'On', 'A And On', .4, 400]
['A', 'Or', 'Off', 'A Or Off', .3, 400]
['A', 'Or', 'On', 'A Or On', .4, 400]
['A', 'Between', 'Off', 'A Between Off', .3, 400]
['A', 'Between', 'On', 'A Between On', .8, 400]
['A', 'And', 'Off', 'A And Off', .4, 250],
['A', 'And', 'On', 'A And On', .5, 250]
['A', 'Or', 'Off', 'A Or Off', .7, 250]
['A', 'Or', 'On', 'A Or On', .3, 250]
['A', 'Between', 'Off', 'A Between Off', .6, 250]
['A', 'Between', 'On', 'A Between On', .4, 250]
])
unique_df = dict(tuple(full_df2.groupby(['Letter', 'Sync', 'Status', 'filter'])))
unique_list = ([x[-1] for x in unique_df])
for x in unique_list:
print (x)
for p in unique_list:
slope, intercept, r_value, p_value, std_err = stats.linregress(full_df2.query("filter == @p")[['rating']], full_df2.query("filter == @p")[['hhs']])
filter_df = full_df2.query("filter == @p")
ax = sns.regplot(x="rating", y="hhs", data=filter_df, color='b',
line_kws={'label':"y={0:.1f}x+{1:.1f}".format(slope,intercept)})
ax.legend()
ax.set_title(p)
plt.show()
print(slope)
这是完整的错误:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-29-75511dada630> in <module>()
1 for p in unique_list:
----> 2 slope, intercept, r_value, p_value, std_err = stats.linregress(full_df2.query("filter == @p")[['rating']], full_df2.query("filter == @p")[['hhs']])
3 #result = [stats.linregress(data[key]['num'],data[key]['com']) for key in keys]
4 #slope, intercept, r_value, p_value, std_err =
5 #.split(',')
~\AppData\Local\Continuum\anaconda3\lib\site-packages\scipy\stats\_stats_mstats_common.py in linregress(x, y)
91
92 # average sum of squares:
---> 93 ssxm, ssxym, ssyxm, ssym = np.cov(x, y, bias=1).flat
94 r_num = ssxym
95 r_den = np.sqrt(ssxm * ssym)
ValueError: too many values to unpack (expected 4)
解决方案
根据我们上面的评论,您遇到的问题是输入的形状。使其工作的最简单方法是将输入更改为linregress
:
stats.linregress(full_df2.query("filter == @p")['rating'], full_df2.query("filter == @p")['hhs'])
我个人会用以下方式编写它:
stats.linregress(full_df2.loc[full_df2.filter == p, 'rating'], full_df2.loc[full_df2.filter == p, 'hhs'])
推荐阅读
- python - 计算日期和时间戳列之间的时间差(以分钟为单位)
- c++ - LLVM Pass Linking 问题:未定义的符号
- c# - 字符串插值分配
- java - 排序方向的 SQL 注入风险?
- node.js - 如何将 Chirp 音频文件上传到 Google Cloud 并使用 Nodejs 制作媒体 URN?
- arrays - GAS:如何跨多个函数创建全局可访问的数组变量
- sql - 过滤的最后一笔交易
- excel - 对于嵌套循环 vba
- reactjs - React-Router-Dom 链接在嵌套组件中不起作用。更新 url 参数,但组件不会在点击时加载。如果我点击后刷新就可以了
- python - 错误'找不到'password_reset_confirm'的反向。' 在 Django