【问题标题】:python pandas : split a data frame based on a column valuepython pandas:根据列值拆分数据框
【发布时间】:2016-03-24 14:43:45
【问题描述】:

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

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

【问题讨论】:

    标签: python numpy pandas


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      如果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
      

      【讨论】:

        【解决方案3】:
        df1 = data[data.result==0]
        df2 = data[data.result==1]
        

        看看this

        【讨论】:

          猜你喜欢
          • 2019-07-25
          • 1970-01-01
          • 1970-01-01
          • 2015-01-15
          • 1970-01-01
          • 2020-10-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多