提问者:小点点

Python熊猫:基于列值拆分数据帧


我有一个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

有什么熊猫功能可以做到这一点吗?或者我必须编写自己的循环函数来创建两个数据帧?非常感谢!


共3个答案

匿名用户

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创建DataFramesdictionary

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]

看看这个。