我有一个数据框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()
答案 0 :(得分:3)
您需要groupby
和count
:
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_counts
,rename_axis
和reset_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
答案 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()