python - 在`unstack`和`set_index`之后切片
问题描述
我有一个关于使用后切片的简单问题unstack
。
我的纵向/面板数据集采用以下longfile
形式(数据输入代码在问题下方)。
time x y
USA 1 5 10
USA 2 5 12
USA 3 6 13
CAN 1 2 2
CAN 2 2 3
CAN 3 4 5
然后我unstack
将数据放入一个widefile
,按时间索引,如下:
df1 = df.reset_index().set_index(['time','index']).unstack(-1)
print(df1)
这使
x y
index CAN USA CAN USA
time
1 2 5 2 10
2 2 5 3 12
3 4 6 5 13
我现在想根据时间对宽文件进行切片,df1
以便:
train
包含t==1
和t==2
test
包含t==3
.
我试过这个:
train = df1[(df.time=='1')|(df.time=='2')]
还有这个:
train = df1[(df.time==1)|(df.time==2)]
但两者都给出错误。
我想要的输出是:
train
x y
index CAN USA CAN USA
time
1 2 5 2 10
2 2 5 3 12
和
test
x y
index CAN USA CAN USA
time
3 4 6 5 13
数据输入代码
import numpy as np
import pandas as pd
data = np.array([['country','time','x','y'],
['USA',1, 5, 10],
['USA',2, 5, 12],
['USA',3,6, 13],
['CAN',1,2, 2],
['CAN',2,2, 3],
['CAN',3,4, 5]],
)
df = pd.DataFrame(data=data[1:,1:],
index=data[1:,0],
columns=data[0,1:])
df
解决方案
首先time
是index
名称,所以它index
不再是列,我们需要使用.index
,第二你需要使用df1
非df
train = df1[df1.index.isin([1,2])]
train
Out[219]:
x y
index CAN USA CAN USA
time
1 2 5 2 10
2 2 5 3 12
推荐阅读
- google-chrome - 从 DOM 对象获取文本。Chrome 扩展程序
- ruby-on-rails - 命名空间中的 devise_scope,rails api_only 模式
- android - RecyclerView 项目的“默认”样式
- java - JavaFX 使用应替换文本的节点创建 fxml 模板
- r - R - 混合设计方差分析事后检验
- python - 导入 h5py 期间模块“numpy”没有属性“dtype”
- jquery - 将 jQuery 添加到 Rails 的问题
- android - 在任何根目录中都找不到入口文件 index.js
- dart - AngularDart将切换事件从一个组件传递到另一个组件
- javascript - 如何创建一个使用字符串作为 X 轴和 Y 轴的图表?