Pandas Dataframe で値が発生する頻度をカウントする方法
Ahmed Waheed
2023年1月30日
DataFrame で作業しているときに、列で値が発生した回数を数えたい場合、つまり、頻度を計算したい場合があります。この目的のために主に 3つの方法が使用されます。それらを一つずつ見てみましょう。
df.groupby().count()
Series.value_counts()
df.groupby().size()
次のセクションでは、次のように同じ DataFrame
を使用します。
import pandas as pd
df = pd.DataFrame(
{
"A": ["jim", "jim", "jim", "jim", "sal", "tom", "tom", "sal", "sal"],
"B": ["a", "b", "a", "b", "b", "b", "a", "a", "b"],
}
)
df.groupby().count()
メソッド
1つの列の頻度を計算する場合は、この方法が最適です。
import pandas as pd
df = pd.DataFrame(
{
"A": ["jim", "jim", "jim", "jim", "sal", "tom", "tom", "sal", "sal"],
"B": ["a", "b", "a", "b", "b", "b", "a", "a", "b"],
}
)
freq = df.groupby(["A"]).count()
print(freq)
freq = df.groupby(["B"]).count()
print(freq)
以下が出力されます。
B
A
jim 4
sal 3
tom 2
A
B
a 4
b 5
Series.value_counts()
メソッド
すべての DataFrame オブジェクトは Series
オブジェクトのコレクションであるため、このメソッドは pandas.Series
オブジェクトに最適です。
Series.values_counts()
関数を使用します
import pandas as pd
df = pd.DataFrame(
{
"A": ["jim", "jim", "jim", "jim", "sal", "tom", "tom", "sal", "sal"],
"B": ["a", "b", "a", "b", "b", "b", "a", "a", "b"],
}
)
freq = df["A"].value_counts()
print(freq)
freq = df["B"].value_counts()
print(freq)
以下が出力されます。
jim 4
sal 3
tom 2
Name: A, dtype: int64
b 5
a 4
Name: B, dtype: int64
df.groupby().size()
メソッド
上記の 2つのメソッドを使用して複数の列の頻度をカウントすることはできませんが、df.groupby().size()
を複数の列に同時に使用できます。
import pandas as pd
df = pd.DataFrame(
{
"A": ["jim", "jim", "jim", "jim", "sal", "tom", "tom", "sal", "sal"],
"B": ["a", "b", "a", "b", "b", "b", "a", "a", "b"],
}
)
freq = df.groupby(["A", "B"]).size()
print(freq)
以下が出力されます。
A B
jim a 2
b 2
sal a 1
b 2
tom a 1
b 1
dtype: int64