如何创建列值的计数,按Pandas中另一列中的值分组?

时间:2017-07-27 21:29:45

标签: python pandas group-by unique

我有一个数据框df,其值为:

we.locationProperty().addListener(new ChangeListener<String>() {
            @Override public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
                if(startRecording > 0)
                {
                    endTime = System.nanoTime();
                    duration = endTime - startTime;
                    if((duration / 1000000000) >= 1)
                    {
                        System.out.println("duration: " + (duration / 1000000000) + " seconds");
                    }
                }
                startRecording++;
                txt.setText(newValue);
            }
        });

我需要按列Status列对列ID进行分组。问题是ID可以有重复,可以有相同或不同的代码。

我的代码是:

ID    Status
1       A
2       B
5       A
1       A
3       B
4       B
5       B

但是,我正在将ID分组,而不显示“状态”列及其值。我需要创建的是一个如下所示的数据集:

df_new = df.groupby('ID').Status.nunique()

4 个答案:

答案 0 :(得分:3)

您需要groupbycount

df.groupby('Status')['Status'].count()

输出:

Status
A    3
B    4
Name: Status, dtype: int64

答案 1 :(得分:1)

我不了解熊猫,但我知道SQL,你所做的基本概念是一样的。首先,您需要使用count函数聚合数据。然后,您可以按该状态列进行分组。

另外,请看这个类似的答案:

如果链接消失,请点击此处的答案:

df = pd.DataFrame({'a':list('abssbab')})
df.groupby('a').count()

答案 2 :(得分:0)

我认为DataFrame需要value_countsrename_axisreset_index

df = df['Status'].value_counts().rename_axis('Status').reset_index(name='Count')
print (df)
  Status  Count
0      B      4
1      A      3

或按GroupBy.size汇总:

df = df.groupby('Status').size().reset_index(name='Count')
print (df)
  Status  Count
0      A      3
1      B      4

编辑:

但是如果希望按列ID获取大小,则不需要另一列:

df1 = df.groupby('ID')['Status'].size().reset_index(name='Count')
print (df1)
   ID  Count
0   1      2
1   2      1
2   3      1
3   4      1
4   5      2

df2 = df.groupby('ID')['ID'].size().reset_index(name='Count')
print (df2)
   ID  Count
0   1      2
1   2      1
2   3      1
3   4      1
4   5      2

df3 = df.groupby('ID').size().reset_index(name='Count')
print (df3)
   ID  Count
0   1      2
1   2      1
2   3      1
3   4      1
4   5      2

但可以使用:

df4 = df.groupby('ID')['Status'].value_counts().reset_index(name='Count')
print (df4)
   ID Status  Count
0   1      A      2
1   2      B      1
2   3      B      1
3   4      B      1
4   5      A      1
5   5      B      1

与...相同:

df4 = df.groupby(['ID', 'Status']).size().reset_index(name='Count')
print (df4)
   ID Status  Count
0   1      A      2
1   2      B      1
2   3      B      1
3   4      B      1
4   5      A      1
5   5      B      1

What is the difference between size and count in pandas?

答案 3 :(得分:0)

对于您要创建的输出,变量状态上的 value_counts 方法就足够了。

import pandas as pd
df = pd.DataFrame(['A','B','A','A','B','B','B'])
df.columns=['Status']
df.Status.value_counts()
相关问题