Pandas 计算唯一行
Pandas Counting Unique Rows
我有一个 pandas 数据框类似于:
ColA ColB
1 1
1 1
1 1
1 2
1 2
2 1
3 2
我想要一个与 Counter 具有相同功能的输出。我需要知道每行出现了多少次(所有列都相同。
在这种情况下,正确的输出是:
ColA ColB Count
1 1 3
1 2 2
2 1 1
3 2 1
我试过类似的东西:
df.groupby(['ColA','ColB']).ColA.count()
但这给了我一些难看的输出我在格式化时遇到了问题
您可以使用 size
with reset_index
:
print df.groupby(['ColA','ColB']).size().reset_index(name='Count')
ColA ColB Count
0 1 1 3
1 1 2 2
2 2 1 1
3 3 2 1
我只需要 计算唯一行数 并使用了 DataFrame.drop_duplicates
替代方法,如下所示:
len(df[['ColA', 'ColB']].drop_duplicates())
我的数据速度是 len(df.groupby(['ColA', 'ColB']))
的两倍。
自 Pandas 1.1.0 以来,方法 pandas.DataFrame.value_counts
可用,它完全满足您的需要。它创建一个系列,其中唯一行作为多索引,计数作为值:
df = pd.DataFrame({'ColA': [1, 1, 1, 1, 1, 2, 3], 'ColB': [1, 1, 1, 2, 2, 1, 2]})
pd.options.display.multi_sparse = False # option to print as requested
print(df.value_counts()) # requires pandas >= 1.1.0
输出,其中 ColA
和 ColB
是多索引,第三列包含计数:
ColA ColB
1 1 3
1 2 2
3 2 1
2 1 1
dtype: int64
我有一个 pandas 数据框类似于:
ColA ColB
1 1
1 1
1 1
1 2
1 2
2 1
3 2
我想要一个与 Counter 具有相同功能的输出。我需要知道每行出现了多少次(所有列都相同。
在这种情况下,正确的输出是:
ColA ColB Count
1 1 3
1 2 2
2 1 1
3 2 1
我试过类似的东西:
df.groupby(['ColA','ColB']).ColA.count()
但这给了我一些难看的输出我在格式化时遇到了问题
您可以使用 size
with reset_index
:
print df.groupby(['ColA','ColB']).size().reset_index(name='Count')
ColA ColB Count
0 1 1 3
1 1 2 2
2 2 1 1
3 3 2 1
我只需要 计算唯一行数 并使用了 DataFrame.drop_duplicates
替代方法,如下所示:
len(df[['ColA', 'ColB']].drop_duplicates())
我的数据速度是 len(df.groupby(['ColA', 'ColB']))
的两倍。
自 Pandas 1.1.0 以来,方法 pandas.DataFrame.value_counts
可用,它完全满足您的需要。它创建一个系列,其中唯一行作为多索引,计数作为值:
df = pd.DataFrame({'ColA': [1, 1, 1, 1, 1, 2, 3], 'ColB': [1, 1, 1, 2, 2, 1, 2]})
pd.options.display.multi_sparse = False # option to print as requested
print(df.value_counts()) # requires pandas >= 1.1.0
输出,其中 ColA
和 ColB
是多索引,第三列包含计数:
ColA ColB
1 1 3
1 2 2
3 2 1
2 1 1
dtype: int64