在熊猫数据框中按条件分组

时间:2020-06-18 16:46:03

标签: python pandas dataframe

我想将continue数据分成几组。 我有一些像这样的数据:

is-invalid

我尝试:

{{ form.email(class="form-control form-control-lg" ~ (" is-invalid" if form.email.errors else "")) }}
{% if form.email.errors %}
  <div class="invalid-feedback">
  {% for error in form.email.errors %}
    <span>{{ error }}</span>
  {% endfor %}
  </div>
{% endif %}

排序后:

Index Age Predict
0     23    0
1     39    0
2     70    0
3     41    1
4     50    0
5     17    0
6     29    1

我该怎么做才能将数据分类到组中

df_1 = df[['Age','Predict']]
data = df_1.sort_values(by='Age')

感谢帮助。

3 个答案:

答案 0 :(得分:1)

IIUC,所需的组是从Predict创建的,其中以下各行之间的diff不等于0。因此您可以创建一列:

data_ = df.sort_values('Age')
data_['gr'] = data_['Predict'].diff().ne(0).cumsum()
print (data_)
   Index  Age  Predict  gr
5      5   17        0   1
0      0   23        0   1
6      6   29        1   2
1      1   39        0   3
3      3   41        1   4
4      4   50        0   5
2      2   70        0   5

或者,如果您想拆分数据而不创建组列,一种方法是创建一个包含每个组的字典

data_ = df.sort_values('Age')
d = {i: dfg 
     for i,(_, dfg) in enumerate(data_.groupby(data_['Predict'].diff().ne(0).cumsum()),1)}
print (d[1])
   Index  Age  Predict
5      5   17        0
0      0   23        0

答案 1 :(得分:1)

df.groupby((df['Predict'] != df['Predict'].shift(1)).cumsum())

基本上检查当前值是否与先前的值不同,如果不是,则增加。这将使您可以根据预测值的变化进行分组

答案 2 :(得分:1)

使用.grouby.cumsum()

for i, grp in data.groupby([(data['Predict'] != data['Predict'].shift()).cumsum()]):
    print('group', i)
    print(grp)

结果:

group 1
   Age  Predict
5   17        0
0   23        0
group 2
   Age  Predict
6   29        1
group 3
   Age  Predict
1   39        0
group 4
   Age  Predict
3   41        1
group 5
   Age  Predict
4   50        0
2   70        0