'21/08/07更新
pandasのgroupbyメソッドを用いることで、比較的容易に出来ます。
df_group = df.groupby('列名')
print(len(df_groupby.count()))
本記事では、その例題として、日本国内の住所が記載されているデータベース(以下、DB)から、都道府県別に住所データを抽出する雛形コードを載せました。データの入手は、次のリンク先の日本郵政のページからできます。https://www.post.japanpost.jp/zipcode/dl/roman-zip.html
ダウンロードしたzipファイルを解凍(展開)すると下図のようなcsvファイルがあります。12万行(件)あります。

このデータから、pandasのgroupbyを用いることで、下図のように都道府県別にフォルダを自動作成できます。

そして、下図は大阪府の場合のフォルダ内です。10_大阪府.txtと大阪府内の市区別csvファイルが保存しています。これもgroupbyメソッドを用いてグループ分けすることで出来ます。

「10_大阪府.txt」を開くと、下図のように大阪府池田市には43の町があることがわかります。groupby.count()で、数をカウント出来ます。

そして、「池田市.csv」を開くと、池田市内だけの町名一覧がわかります。

■本プログラム
import os
import pandas as pd
import glob
def pandas_groupby_func(DF, folder, target1, target2):
df_groupby = DF.groupby(target1)
print(df_groupby.count())
print(len(df_groupby.count()))
print(r"#########")
for name, group_df in df_groupby:
df1 = group_df.groupby(target2)
print(name, len(df1.count()))
path_list = [folder, folder + '.txt']
with open(os.path.join(*path_list), 'a') as f:
f.writelines([name, ',', str(len(df1.count())), '\n'])
path_list = [folder, name + '.csv']
group_df.to_csv(os.path.join(*path_list),
index=False,
encoding='shift_jis')
def main():
df = pd.read_csv(input_file,
header=None,
encoding='shift_jis')
df.columns = column_names
myfolder_name = os.path.basename(input_file).split('.', 1)[0]
os.makedirs(myfolder_name, exist_ok=True)
pandas_groupby_func(df, myfolder_name,
target_column_name1, target_column_name2)
input_file_list = glob.glob(myfolder_name + '/*.csv')
for i, myfile in enumerate(input_file_list, start=1):
myfolder_name = str(i) + '_' + os.path.basename(myfile).split('.', 1)[0]
os.makedirs(myfolder_name, exist_ok=True)
df = pd.read_csv(myfile,
encoding='shift_jis')
pandas_groupby_func(df, myfolder_name,
target_column_name2, target_column_name3)
if __name__ == '__main__':
input_file = 'KEN_ALL_ROME.CSV'
column_names = ['郵便番号','都道府県','市区','町','todoufuken','shiku','machi']
target_column_name1 = '都道府県'
target_column_name2 = '市区'
target_column_name3 = '町'
main()
以上
<広告>
リンク