元のDataFrameの形がきれいではないので、前処理をしてdf2の形に整形します。
print(df)
python
1>>> print(df)
2 date value
30 20211010 "A", "B", "C"
41 20211011 "A", "C"
52 20211012 "D", "E", "F"
6>>>
7>>> slist = []
8>>> for i, row in df.iterrows():
9... for v in row['value'].split(', '):
10... s = row.copy()
11... s['value'] = v
12... slist.append(s)
13...
14>>> df2 = pd.concat(slist, axis=1).T.reset_index(drop=True)
15>>> print(df2)
16 date value
170 20211010 "A"
181 20211010 "B"
192 20211010 "C"
203 20211011 "A"
214 20211011 "C"
225 20211012 "D"
236 20211012 "E"
247 20211012 "F"
df2に対してget_dummiesを使って0か1の列にします。
python
1>>> df3 = pd.get_dummies(df2, columns=['value'],prefix='', prefix_sep='')
2>>> print(df3)
3 date "A" "B" "C" "D" "E" "F"
40 20211010 1 0 0 0 0 0
51 20211010 0 1 0 0 0 0
62 20211010 0 0 1 0 0 0
73 20211011 1 0 0 0 0 0
84 20211011 0 0 1 0 0 0
95 20211012 0 0 0 1 0 0
106 20211012 0 0 0 0 1 0
117 20211012 0 0 0 0 0 1
df3に対してgroupbyを使って日付付けごとの合計を取ります。
python
1>>> df4 = df3.groupby('date').sum().reset_index()
2>>> print(df4)
3 date "A" "B" "C" "D" "E" "F"
40 20211010 1 1 1 0 0 0
51 20211011 1 0 1 0 0 0
62 20211012 0 0 0 1 1 1
詳しいことが知りたければ、以下をお読みください。
pandas.DataFrame, Seriesを連結するconcat
pandas.DataFrame, Seriesのインデックスを振り直すreset_index
pandasでカテゴリ変数をダミー変数に変換(get_dummies)
pandas.DataFrameをGroupByでグルーピングし統計量を算出
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/19 12:19