- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
问题
为股票交易准备机器学习数据。我在大型 DataFrame 上有 3-dim MultiIndex(可能是 n=800000 x f=20
)。一个索引维度是 date
关于 dt=1000
水平,其他人识别m=800
不同的股票(每只股票有 20 个特征,每只股票都有)。因此对于每个日期,有 800 x 20 个不同的值。
现在我有 dt=1000 x g=30
全局时间序列(如 DJIA、货币汇率等),因此每个日期的 30 个值对于每只股票都相同。这是一个单一的索引 DataFrame,只有日期作为索引。
问题一
我如何合并这两个数据集,以便将 30 个系列广播到每只股票上,最终形状为 (800000 x 50)
?
问题二
有没有办法不通过复制后30列的数据,而是查看原始数据来节省内存?根据我提到的数字,对于 float64 精度,我仍然会在 ~ 300 MB 左右,这仍然可以。但我很好奇。
示例
这是 f=2
的一个最小示例, g=1
, m=4
和 dt=3
我所拥有的:
import pandas as pd
data = {
'x': [5,6,7,3,4,5,1,1,0,12,15,14],
'y': [4,6,5,5,4,3,2,0,1,13,14,13]
}
dates = [pd.to_datetime('2018-01-01'), pd.to_datetime('2018-01-02'), pd.to_datetime('2018-01-03')]
index = pd.MultiIndex.from_arrays([
['alpha'] * 6 + ['beta'] * 6,
['A'] * 3 + ['B'] * 3 + ['C'] * 3 + ['D'] * 3,
dates * 4,
])
df1 = pd.DataFrame(data, index=index)
df1.index.names = ['level', 'name', 'date']
df2 = pd.DataFrame([123,124,125], index=dates, columns=['z'])
df2.index.name = "date"
print (df1)
print (df2)
-------------------------------
x y
level name date
alpha A 2018-01-01 5 4
2018-01-02 6 6
2018-01-03 7 5
B 2018-01-01 3 5
2018-01-02 4 4
2018-01-03 5 3
beta C 2018-01-01 1 2
2018-01-02 1 0
2018-01-03 0 1
D 2018-01-01 12 13
2018-01-02 15 14
2018-01-03 14 13
z
date
2018-01-01 123
2018-01-02 124
2018-01-03 125
我喜欢拥有的东西:
x y z
level name date
alpha A 2018-01-01 5 4 123
2018-01-02 6 6 124
2018-01-03 7 5 125
B 2018-01-01 3 5 123
2018-01-02 4 4 124
2018-01-03 5 3 125
beta C 2018-01-01 1 2 123
2018-01-02 1 0 124
2018-01-03 0 1 125
D 2018-01-01 12 13 123
2018-01-02 15 14 124
2018-01-03 14 13 125
最佳答案
我认为需要join
两个 DataFrame
中相同索引名称 date
的对齐方式:
df = df1.join(df2)
print (df)
x y z
level name date
alpha A 2018-01-01 5 4 123
2018-01-02 6 6 124
2018-01-03 7 5 125
B 2018-01-01 3 5 123
2018-01-02 4 4 124
2018-01-03 5 3 125
beta C 2018-01-01 1 2 123
2018-01-02 1 0 124
2018-01-03 0 1 125
D 2018-01-01 12 13 123
2018-01-02 15 14 124
2018-01-03 14 13 125
关于python - pandas:在 MultiIndex DataFrame 上复制/广播单索引 DataFrame:HowTo 和内存效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48807723/
我有一个包含 4 个级别的 MultiIndex 的 pandas 数据框。我正在尝试为每个 1 级索引选择具有不同 4 级索引的行。 例子: In [68]: df = pd.DataFrame({
我有一个数据框,其中包含 Year 和 Month 的多个索引,如下所示 | |Value Year |Month| | 1 | 3 1992 | 2 | 5
我有一个带有 3 级 MultiIndex 的 pandas 数据框。我正在尝试根据对应于两个级别的值列表提取此数据帧的行。 我有这样的事情: ix = pd.MultiIndex.from_prod
我想将具有多索引的数据帧中的所有列除以另一个具有多索引的数据帧,更小一级。前两个水平的蛾指数是相同的。并且应该播放第三级。 df_0 = pd.DataFrame( { "col0": [ 1
我想知道是否有人可以帮助我解决这个问题。 如果我有一个简单的数据框: one two three four 0 A 1 a 1 1 A 2 b
我希望创建一个新的 DataFrame,与基于芯片的设备 A 和 B 的结果相对应。 以下是我创建 DataFrame 的代码: import numpy as np import pandas as
我希望创建一个新的 DataFrame,与基于芯片的设备 A 和 B 的结果相对应。 以下是我创建 DataFrame 的代码: import numpy as np import pandas as
请让我知道如何将两个 DataFrame 与排序的 MultiIndexes 连接起来,以便结果具有排序的 MultiIndex。 由于两者都是排序的,算法必须根据两个 DataFrame 中的总行数
基本场景 对于推荐服务,我正在针对一组用户-项目交互训练矩阵分解模型 (LightFM)。为了使矩阵分解模型产生最佳结果,我需要将我的用户 ID 和商品 ID 映射到从 0 开始的连续整数 ID 范围
好的,所以我有一个数据框,其中包含时间序列数据,每列都有一个多行索引。这是数据的样例,它是 csv 格式的。加载数据在这里不是问题。 我想要做的是能够创建一个箱线图,其中包含根据多索引特定行中的不同类
我有这个数据框: df = pd.DataFrame({'NUMBER_1': {('2019-07', 'A'): 4, ('2019-07', 'D'): 2, ('2019-08', 'A'):
我有点难以对用于我的一个数据集的列的 pandas MultiIndex 进行排序: MultiIndex(levels=[['Jan', 'Feb', 'Mar', 'Apr', 'May', 'J
我有点难以对用于我的一个数据集的列的 pandas MultiIndex 进行排序: MultiIndex(levels=[['Jan', 'Feb', 'Mar', 'Apr', 'May', 'J
我有一个列表列表,我想将其制成多索引 Pandas 数据框,然后可以合并到原始 Pandas 数据框。列表的每一行都包含一个观察值,列表中的值由与该观察值匹配的相应行组成。 这是我所拥有的一个简单版本
我有以下 DataFrame(从我无法更改的 CSV 文件中读取): df = pd.DataFrame([['low', 0.5, 123, 0.8, 123],
我正在创建一个 MultiIndex.from_product(),但它必须是来自两个单独的 MultiIndexes 的唯一值的乘积。我下面的解决方案有效,但我想知道是否有更优雅的解决方案。 fro
我有一个很大的pd.DataFrame,a,看起来像: bid TIT IM Equity HELN SE Equity FHZN SE Equity GLEN LN Equity f
我创建了一个带有多索引的数据框,其中一个索引是一个元组。我无法使用 .loc 进行索引。 这是数据框: a = [['a','a','a','b','b','b','c','c'],[('one',2
我有以下数据框 A B C D E F Algo T X
我在使用 MultiIndex 和 stack() 时遇到问题。以下示例基于 solution from Calvin Cheung在 StackOvervlow 上。 === multi.csv =
我是一名优秀的程序员,十分优秀!