我有一个csv文件,当我读入熊猫数据帧时,它看起来像:
data = pd.read_csv('test1.csv')
print(data)
输出如下所示:
v1 v2 v3 result
0 12 31 31 0
1 34 52 4 1
2 32 4 5 1
3 7 89 2 0
是否有方法根据结果列中的值拆分数据帧。即,如果结果=0,则转到新的数据帧data_0:
v1 v2 v3 result
0 12 31 31 0
1 7 89 2 0
如果结果=1,则转到数据帧data_1
v1 v2 v3 result
0 34 52 4 1
1 32 4 5 1
有什么熊猫功能可以做到这一点吗?或者我必须编写自己的循环函数来创建两个数据帧?非常感谢!
Pandas允许您以非常简单的方式对数据进行切片和操作。您也可以使用键而不是属性名执行与Yakym访问相同的操作。
data_0 = data[data['result'] == 0]
data_1 = data[data['result'] == 1]
您甚至可以通过直接操作行数据来添加结果列,例如:
data['v_sum'] = data[v1] + data[v2] + data[v3]
如果列result
具有许多不同的值,则可以尝试通过groupby
创建DataFrames
的dictionary
:
print data
v1 v2 v3 result
0 12 31 31 0
1 34 52 4 1
2 32 4 5 1
3 7 89 2 0
datas = {}
for i, g in data.groupby('result'):
#print 'data_' + str(i)
#print g
datas.update({'data_' + str(i) : g.reset_index(drop=True)})
print datas['data_0']
v1 v2 v3 result
0 12 31 31 0
1 7 89 2 0
print datas['data_1']
v1 v2 v3 result
0 34 52 4 1
1 32 4 5 1
df1 = data[data.result==0]
df2 = data[data.result==1]
看看这个。