- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在 graphlab
中,我有以下 SFrame
调用 train
:
import graphlab
train = graphlab.read_csv('clean_train.csv')
train.head()
[输出]:
+-------+------------+---------+-----------+
| Store | Date | Sales | Customers |
+-------+------------+---------+-----------+
| 1 | 2015-07-31 | 5263.0 | 555.0 |
| 2 | 2015-07-31 | 6064.0 | 625.0 |
| 3 | 2015-07-31 | 8314.0 | 821.0 |
| 4 | 2015-07-31 | 13995.0 | 1498.0 |
| 3 | 2015-07-20 | 4822.0 | 559.0 |
| 2 | 2015-07-10 | 5651.0 | 589.0 |
| 4 | 2015-07-11 | 15344.0 | 1414.0 |
| 5 | 2015-07-23 | 8492.0 | 833.0 |
| 2 | 2015-07-19 | 8565.0 | 687.0 |
| 10 | 2015-07-09 | 7185.0 | 681.0 |
+-------+------------+---------+-----------+
[986159 rows x 4 columns]
要获得每家商店的中位数销售额,我可以执行以下操作,使用 graphlab
为每家商店的中位数销售额附加一个新列:
mediansales_perstore = train.groupby('Store', operations={'mediansales': agg.QUANTILE('Sales', 0.5)})
train_stores = train_stores.join(mediansales_perstore, on='Store')
test_stores['mediansales'] = [i[0] for i in test_stores['mediansales']]
代码在 graphlab
中运行,添加了一个新行 mediansales
。但是当我尝试将 pandas
DataFrame
与代码一起使用时:
mediansales_perstore = train.groupby(['Store'])['Sales'].median()
这会根据 graphlab 代码提取每家商店的中位数销售额,但是当我尝试将其合并回火车矩阵时:
train.join(pd.DataFrame(train.groupby(['Store'])['Sales'].median()), on='Store')
它失败并抛出错误:
ValueError Traceback (most recent call last)
<ipython-input-15-7b64cb46e386> in <module>()
----> 1 train.join(pd.DataFrame(train.groupby(['Store'])['Sales'].median()), on='Store')
/usr/local/lib/python2.7/dist-packages/pandas/core/frame.pyc in join(self, other, on, how, lsuffix, rsuffix, sort)
4017 # For SparseDataFrame's benefit
4018 return self._join_compat(other, on=on, how=how, lsuffix=lsuffix,
-> 4019 rsuffix=rsuffix, sort=sort)
4020
4021 def _join_compat(self, other, on=None, how='left', lsuffix='', rsuffix='',
/usr/local/lib/python2.7/dist-packages/pandas/core/frame.pyc in _join_compat(self, other, on, how, lsuffix, rsuffix, sort)
4031 return merge(self, other, left_on=on, how=how,
4032 left_index=on is None, right_index=True,
-> 4033 suffixes=(lsuffix, rsuffix), sort=sort)
4034 else:
4035 if on is not None:
/usr/local/lib/python2.7/dist-packages/pandas/tools/merge.pyc in merge(left, right, how, on, left_on, right_on, left_index, right_index, sort, suffixes, copy)
36 right_index=right_index, sort=sort, suffixes=suffixes,
37 copy=copy)
---> 38 return op.get_result()
39 if __debug__:
40 merge.__doc__ = _merge_doc % '\nleft : DataFrame'
/usr/local/lib/python2.7/dist-packages/pandas/tools/merge.pyc in get_result(self)
190
191 llabels, rlabels = items_overlap_with_suffix(ldata.items, lsuf,
--> 192 rdata.items, rsuf)
193
194 lindexers = {1: left_indexer} if left_indexer is not None else {}
/usr/local/lib/python2.7/dist-packages/pandas/core/internals.pyc in items_overlap_with_suffix(left, lsuffix, right, rsuffix)
3969 if not lsuffix and not rsuffix:
3970 raise ValueError('columns overlap but no suffix specified: %s' %
-> 3971 to_rename)
3972
3973 def lrenamer(x):
ValueError: columns overlap but no suffix specified: Index([u'Sales'], dtype='object')
如何使用 pandas
以“Store”为键合并“Sales”列的中位数? graphlab
代码有效虽然。
最佳答案
您可以使用 transform
一次性完成此操作:
>>> train['Median-Sales'] = train.groupby('Store')['Sales'].transform('median')
>>> train
Store Date Sales Customers Median-Sales
0 1 2015-07-31 5263 555 5263.0
1 2 2015-07-31 6064 625 6064.0
2 3 2015-07-31 8314 821 6568.0
3 4 2015-07-31 13995 1498 14669.5
4 3 2015-07-20 4822 559 6568.0
5 2 2015-07-10 5651 589 6064.0
6 4 2015-07-11 15344 1414 14669.5
7 5 2015-07-23 8492 833 8492.0
8 2 2015-07-19 8565 687 6064.0
9 10 2015-07-09 7185 681 7185.0
合并错误只是说您在左右框架中有重复的列名称,因此您需要提供后缀来区分列或重命名列:
>>> right = train.groupby('Store')['Sales'].median()
>>> right.name = 'Median-Sales'
>>> train.join(right, on='Store')
Store Date Sales Customers Median-Sales
0 1 2015-07-31 5263 555 5263.0
1 2 2015-07-31 6064 625 6064.0
2 3 2015-07-31 8314 821 6568.0
3 4 2015-07-31 13995 1498 14669.5
4 3 2015-07-20 4822 559 6568.0
5 2 2015-07-10 5651 589 6064.0
6 4 2015-07-11 15344 1414 14669.5
7 5 2015-07-23 8492 833 8492.0
8 2 2015-07-19 8565 687 6064.0
9 10 2015-07-09 7185 681 7185.0
关于python - 通过关键列合并一列的中位数 - SFrame/Pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33860511/
我正在使用 graphlab 库中的 sframes。我需要按行进行一些计算。此外,如果我能够转置 sframe,则 sframe 结构在我的情况下会更有意义。 有什么办法可以做到吗?还是可以在我可以
我有一个大约 20GB 的庞大数据集。我已经使用 graphlab.SFrame.read_csv() 读取了数据。我有一个日期列,它被读取为格式为 yyyy-dd-mm 的字符串。但我希望将该列作为
拜托,谁能告诉我,我如何从 SFrame 中的每个值中取对数,graphlab(或 DataFrame,pandas)列,而不遍历 SFrame 列的整个长度? 我对类似的功能特别感兴趣,比如 Gro
我对如何选择 SFrame 数组中的特定行感到困惑。我可以在此处选择第一行: sf +-------------------------------+ | X1
我已加入 coursera 上的机器学习类(class)。我在执行以下命令时遇到问题: sales = graphlab.SFrame('home_data.gl/') 错误如下: IOErr
我正在使用 graphlab 和 sframes 在 ipython 笔记本中构建重复订单报告。我有一个 csv 文件,其中包含大约 10 万行数据,其中包含 user_id、user_email、u
我需要将 SFrame 列转换为列表。 输入: `+---------+ | word | +---------+ | love | | loves | |
在 graphlab 中,我有以下 SFrame 调用 train: import graphlab train = graphlab.read_csv('clean_train.csv') trai
我正在浏览 Graphlab 文档,我正在尝试弄清楚如何复制 pandas 功能,如果 na 值被中值、均值或模式等替换...在 Pandas 中,您只需通过以下方式执行此操作:df.dropna()
我有一个制表符分隔的文件: $ echo -e 'abc\txyz\t0.9\nefg\txyz\t0.3\nlmn\topq\t0.23\nabc\tjkl\t0.5\n' > test.txt $
我有这样一个 sframe: +---------+------+-------------------------------+-----------+------------------+ | t
任何人都可以,请告诉我,我如何绘制 SFrame (甚至更好 SArray )或将此类型转换为 python 中的某些常见类型。例如,当我尝试将 SArray 转换为 Pandas 对象时: pand
如何对 SFrame graphlab 的一列中的所有值求和。我试着查看官方文档,它只针对 SaArray( doc )没有任何例子。 最佳答案 >>> import graphlab as gl >
给定一个 Graphlab SFrame: +-------+------------+---------+-----------+ | Store | Date | Sales |
有一个 SFrame,其中的列具有 dict 元素。 import graphlab import numpy as np a = graphlab.SFrame({'col1':[{'oshan':
我有以下代码,其中使用循环提取一些信息并使用这些信息创建一个新矩阵。但是,由于我使用的是循环,因此该代码需要很长时间才能完成。 我想知道是否有更好的方法通过使用 GraphLab 的 SFrame 或
我正在尝试对充满数据的 s 帧使用简单的应用。这是针对其中一列的简单数据转换,应用一个接受文本输入并将其拆分为列表的函数。这是函数及其调用/输出: In [1]: def count_word
我有两列字符串。让我们说 col1 和 col2现在我们如何使用 graphlab SFrame 将 col1 和 col2 的内容合并到 col3 中? col1 col2 23 33 42
我有一个 SFrame,其外观与 sf.print_rows(10) 类似: +--------------+---------------+-------+---------------------
我想创建一个SFrame来自 NumPy 数组。 我具体想要的是: np.arange(16).reshape(4, 4) => +----+----+----+----+ | 0 | 1 | 2
我是一名优秀的程序员,十分优秀!