cho*_*raf 8 python numpy scipy pandas scikit-learn
我有一个包含数据的大型数据框,以及包含每个时间点元数据的相同第一维的另一个数据框(例如,它是什么试用版,它是什么样的试用版).
我想要做的是使用"metadataframe"的值来切割大型数据帧.我想保持这些独立(而不是将元数据帧存储为较大元数据的多索引).
现在,我正在尝试做这样的事情:
def my_func(container):
container.big_df.set_index(container.meta_df[['col1', 'col2']])
container.big_df.loc['col1val', 'col2val'].plot()
Run Code Online (Sandbox Code Playgroud)
但是,这会返回以下错误:
ValueError: Must pass DataFrame with boolean values only
Run Code Online (Sandbox Code Playgroud)
请注意,如果我只将一个列传递给set_index,这样可以正常工作.
谁能弄明白这里出了什么问题?或者,有人可以告诉我,我是以一种完全愚蠢和愚蠢的方式做到这一点,并且有一个更好的方法去做吗?:)
我的解决方案
谢谢你的想法.我玩了索引一点点,这似乎是最简单/最快的.我不喜欢剥离其名称的索引,并且转换值等似乎很麻烦.我意识到一些有趣的东西(可能很容易修复):
dfa.set_index(dfb[['col1', 'col2']])
Run Code Online (Sandbox Code Playgroud)
不起作用,但是
dfa.set_index([dfb.col1, dfb.col2])
Run Code Online (Sandbox Code Playgroud)
确实.
因此,您基本上可以将dfb转换为列列表,使set_index工作,遵循以下约定:
dfa.set_index([dfb[col] for col in ['col1', 'col2']])
Run Code Online (Sandbox Code Playgroud)
使用MultiIndex.from_arrays()创建索引对象:
import pandas as pd
df1 = pd.DataFrame({"A":[1,2,3], "B":["a","b","c"]})
df2 = pd.DataFrame({"C":[100,200,300]})
df2.index = pd.MultiIndex.from_arrays(df1.values.T)
print df2
Run Code Online (Sandbox Code Playgroud)
结果:
C
1 a 100
2 b 200
3 c 300
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13705 次 |
| 最近记录: |