在 pandas 数据框中使用 .groupby 计算唯一值
counting unique values using .groupby in pandas dataframe
我有一个数据框,当我 运行 我的代码时,它 returns 都是 Nan 的,而不是返回计数值。
我确定这很简单,但我无法弄清楚。我试图在每个位置获得唯一数量的物种。我希望新列输出物种计数 [2,2,1,1,2,2,1,1]
import pandas as pd
df = pd.DataFrame({
'ID': [1, 2, 3, 4, 5, 6, 7, 8],
'location': ['A', 'A', 'C', 'C', 'E', 'E', 'E', 'E'],
'Species': ['Cat', 'Cat', 'Dog', 'Cat', 'Cat', 'Cat', 'Dog', 'Bird'],
'Count': [2,2,2,2,4,4,4,4]
})
def abundance(data):
data["Abundance"] = data[data.Species.notnull()].groupby('location')['Species'].unique()
abundance(df)
print(df)
````````````````````
ID location Species Count Abundance
0 1 A Cat 2 NaN
1 2 A Cat 2 NaN
2 3 C Dog 2 NaN
3 4 C Cat 2 NaN
4 5 E Cat 4 NaN
5 6 E Cat 4 NaN
6 7 E Dog 4 NaN
7 8 E Bird 4 NaN
我相信您需要计算每对 location, Species
。而且,要将 groupby
输出分配回原始数据帧,我们通常使用 transform
:
df['Abundance'] = df.groupby(['location','Species']).Species.transform('size')
输出:
ID location Species Count Abundance
0 1 A Cat 2 2
1 2 A Cat 2 2
2 3 C Dog 2 1
3 4 C Cat 2 1
4 5 E Cat 4 2
5 6 E Cat 4 2
6 7 E Dog 4 1
7 8 E Bird 4 1
df.groupby(['location','Species']).Species.value_counts().to_frame('Abundance')
Abundance
location Species Species
A Cat Cat 2
C Cat Cat 1
Dog Dog 1
E Bird Bird 1
Cat Cat 2
Dog Dog 1
我相信您应该尝试使用您希望在输出中包含的列对数据框进行分组,
>>> df[df.Species.notnull()].groupby(['location','Species']).count()
ID Count
location Species
A Cat 2 2
C Cat 1 1
Dog 1 1
E Bird 1 1
Cat 2 2
Dog 1 1
我有一个数据框,当我 运行 我的代码时,它 returns 都是 Nan 的,而不是返回计数值。 我确定这很简单,但我无法弄清楚。我试图在每个位置获得唯一数量的物种。我希望新列输出物种计数 [2,2,1,1,2,2,1,1]
import pandas as pd
df = pd.DataFrame({
'ID': [1, 2, 3, 4, 5, 6, 7, 8],
'location': ['A', 'A', 'C', 'C', 'E', 'E', 'E', 'E'],
'Species': ['Cat', 'Cat', 'Dog', 'Cat', 'Cat', 'Cat', 'Dog', 'Bird'],
'Count': [2,2,2,2,4,4,4,4]
})
def abundance(data):
data["Abundance"] = data[data.Species.notnull()].groupby('location')['Species'].unique()
abundance(df)
print(df)
````````````````````
ID location Species Count Abundance
0 1 A Cat 2 NaN
1 2 A Cat 2 NaN
2 3 C Dog 2 NaN
3 4 C Cat 2 NaN
4 5 E Cat 4 NaN
5 6 E Cat 4 NaN
6 7 E Dog 4 NaN
7 8 E Bird 4 NaN
我相信您需要计算每对 location, Species
。而且,要将 groupby
输出分配回原始数据帧,我们通常使用 transform
:
df['Abundance'] = df.groupby(['location','Species']).Species.transform('size')
输出:
ID location Species Count Abundance
0 1 A Cat 2 2
1 2 A Cat 2 2
2 3 C Dog 2 1
3 4 C Cat 2 1
4 5 E Cat 4 2
5 6 E Cat 4 2
6 7 E Dog 4 1
7 8 E Bird 4 1
df.groupby(['location','Species']).Species.value_counts().to_frame('Abundance')
Abundance
location Species Species
A Cat Cat 2
C Cat Cat 1
Dog Dog 1
E Bird Bird 1
Cat Cat 2
Dog Dog 1
我相信您应该尝试使用您希望在输出中包含的列对数据框进行分组,
>>> df[df.Species.notnull()].groupby(['location','Species']).count()
ID Count
location Species
A Cat 2 2
C Cat 1 1
Dog 1 1
E Bird 1 1
Cat 2 2
Dog 1 1