Python Pandas:基于列值拆分数据帧

3
我有一个 csv 文件,当我读入 pandas 数据框时,它的样子是:
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

的英文原意是水平分割线。
以下是原文的翻译:
有没有一种方法可以根据结果列中的值拆分数据框。例如,如果result=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函数可以做到这一点?还是我需要编写自己的循环函数来创建两个数据帧?非常感谢!
3个回答

6

Pandas允许您以非常简单直接的方式切片和操作数据。您也可以像使用键一样访问,而不是属性名称。

data_0 = data[data['result'] == 0]
data_1 = data[data['result'] == 1]

您甚至可以通过直接操作行数据来添加结果列,例如:

data['v_sum'] = data[v1] + data[v2] + data[v3]

2
您可以尝试使用groupby来创建DataFrames的字典,如果列result有许多不同的值:
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

1
df1 = data[data.result==0]
df2 = data[data.result==1]

请看this

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接