1. ホーム
  2. pandas

pandas 基本特性メソッド ランダム整理(3つ) --- 記述統計 / 重複排除カウント / グループソート

2022-02-12 23:29:20
<パス
  1. グループ化・ソート
  2. Series.value_counts() & drop_duplicates()

データセット

baby_names.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1016395 entries, 0 to 1016394
Data columns (total 5 columns):
Name 1016395 non-null object
Year 1016395 non-null int64
Gender 1016395 non-null object
State 1016395 non-null object
Count 1016395 non-null int64
dtypes: int64(2), object(3)
memory usage: 38.8+ MB

baby_names.head()
Out[30]: 
      Name Year Gender State Count
0 Emma 2004 F AK 62
1 Madison 2004 F AK 48
2 Hannah 2004 F AK 46
3 Grace 2004 F AK 44
4 Emily 2004 F AK 41

  • Tips:value_counts() & drop_duplicates()

value_counts() : Series.value_counts() 発生頻度 (ただし、DataFrame (baby_names) とDataFrameのグループ化 (DataFrame.groupby()) には、value_counts() プロパティはありません)
1) データセットに含まれる名前の数(重複排除後の'Name'の数)
方法です。
1) baby_names['Name'].value_counts().shape。
2) baby_names.drop_duplicates('名前').counts()の場合
(注:方法2) drop_duplicats('Name')はname列が重複していないことを意味し、drop_duplicats(['Name', 'Gender')] ならタプル (Name, Gender) 全体として重複していない (Lucy, F) と (Lucy, M) 全体として重複していない、2データとカウントされます)

baby_names['Name'].value_counts().shape
Out[92]: (17632,)

baby_names.drop_duplicates('Name').counts()
Out[91]: 
Name 17632
Year 17632
Gender 17632
State 17632
Name 17632 Year 17632 Gender 17632 State 17632
dtype: int64
AttributeError: 'DataFrame' object has no attribute 'value_counts'
AttributeError: 'DataFrameGroupBy' object has no attribute 'value_counts'

names['Count'].idxmax()
Out[103]: 'Jacob'

説明 データセット中の各Name要素の出現頻度が1回以上であることを、Seriesのvalue_counts()属性で判定する。

補足です。説明と要約統計。
a) idxmax() : を取得する機能 最大値 データの のインデックス値の
質問です。namesのCount列のデータが一番大きい人は誰でしょう?
方法です。 names['Count']. idxmax()

names[names['Count']==names['Count'].min()].count()
Out[105]: 
Year 2578
Count 2578
dtype: int64

names[names['Count']==names['Count'].min()].shape[0]
Out[108]: 2578

len(names[names['Count']==names['Count'].min()])
Out[107]: 2578

b) 数値計算方式。 .count() / .shape / len()
質問です。名前に含まれるCountの値が最も小さい名前の数
方法です。(推奨方法2、方法3)

names['Count'].median() # median of values
Out[119]: 49.0

names['Count'].var() # Variance of sample values
Out[120]: 121133565.13204491

names['Count'].std() # standard deviation of sample values 
Out[117]: 11006.069467891111

names.describe()
Out[118]: 
               Year Count
count 1.763200e+04 17632.000000
mean 1.158117e+05 2008.932169
std 2.451618e+05 11006.069468
min 2.004000e+03 5.000000
25% 4.017000e+03 11.000000
50% 1.606100e+04 49.000000
75% 7.846425e+04 337.000000
max 2.233993e+06 242874.000000

c) .median() / .var() / .std() / .describe() ................................(以下省略

names = baby_names.groupby('Name').sum()
names.head()
Out[56]: 
           Year Count
Name                  
Aaban 4027 12
Aadan 8039 23
Aadarsh 2009 5
Aaden 393963 3426
Aadhav 2014 6

len(names) # How many different names exist in the dataset?
Out[74]: 17632

  • サブグループ

baby_names.groupby('Name'). agg_func()

names['Count'].sort_values(ascending=False).head()
Out[67]: 
Name
Jacob 242874
Emma 214852
Michael 214405
Ethan 209277
Isabella 204798
Name: Count, dtype: int64

names.sort_values(by=['Count'],ascending=False).head()
Out[68]: 
             Year Count
Name                     
Jacob 1141099 242874
Emma 1137085 214852
Michael 1161152 214405
Ethan 1139091 209277
Isabella 1137090 204798


  • 並び替え

2つの入出力は異なるフォーマットでレンダリングされていることに注意してください。

names['Count'].sort_values(ascending=False).head()
Out[67]: 
Name
Jacob 242874
Emma 214852
Michael 214405
Ethan 209277
Isabella 204798
Name: Count, dtype: int64

names.sort_values(by=['Count'],ascending=False).head()
Out[68]: 
             Year Count
Name                     
Jacob 1141099 242874
Emma 1137085 214852
Michael 1161152 214405
Ethan 1139091 209277
Isabella 1137090 204798