回答編集履歴

3

テキスト修正

2020/01/18 12:17

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -127,3 +127,101 @@
127
127
 
128
128
 
129
129
  参考になれば幸いです。
130
+
131
+
132
+
133
+ ### 追記
134
+
135
+
136
+
137
+ 複数の集合の和集合を作る `set.union` を使うと、上記のコードでリストを連結してから set にしていたのを、集合の演算のみで出来ました。
138
+
139
+
140
+
141
+ ```
142
+
143
+ import pandas as pd
144
+
145
+
146
+
147
+ df_event = pd.read_csv('event.csv')
148
+
149
+
150
+
151
+ df_event["_協賛会社set"] = [set(lis) for lis in df_event["協賛会社"].str.split('、')]
152
+
153
+
154
+
155
+ print(df_event[["開催(西暦)", "_協賛会社set"]])
156
+
157
+ print('----------')
158
+
159
+
160
+
161
+ df_count = df_event[
162
+
163
+ ["開催(西暦)", "_協賛会社set"]
164
+
165
+ ].groupby("開催(西暦)").agg(lambda sets: len(set.union( * sets.values)))
166
+
167
+
168
+
169
+ df_count.rename(columns = {
170
+
171
+ "_協賛会社set": "協賛会社数"
172
+
173
+ }, inplace = True)
174
+
175
+
176
+
177
+ del df_event["_協賛会社set"]
178
+
179
+
180
+
181
+ print(df_count)
182
+
183
+
184
+
185
+ ```
186
+
187
+ 上記を実行すると、下記の出力が得られます。
188
+
189
+
190
+
191
+ ```
192
+
193
+ 開催(西暦) _協賛会社set
194
+
195
+ 0 1985 {A社}
196
+
197
+ 1 1940 {B社}
198
+
199
+ 2 1999 {D社, C社}
200
+
201
+ 3 1963 {F社, A社, E社}
202
+
203
+ 4 1967 {D社, G社}
204
+
205
+ 5 1999 {C社}
206
+
207
+ 6 1963 {F社, D社, E社}
208
+
209
+ ----------
210
+
211
+ 協賛会社数
212
+
213
+ 開催(西暦)
214
+
215
+ 1940 1
216
+
217
+ 1963 4
218
+
219
+ 1967 2
220
+
221
+ 1985 1
222
+
223
+ 1999 2
224
+
225
+ ```
226
+
227
+ - **動作確認用 Repl.it:** [https://repl.it/@jun68ykt/Q235898-2](https://repl.it/@jun68ykt/Q235898-2)

2

テキスト修正

2020/01/18 12:17

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -116,7 +116,7 @@
116
116
 
117
117
 
118
118
 
119
- `_協賛会社list` と `_協賛会社Set` は中間生成物なので、削除したほうがよいと思いますが、コードの意図を明確にするため、残してあります。
119
+ `_協賛会社list` と `_協賛会社Set` は中間生成物なので、削除したほうがよいと思いますが、コードの意図を明確にするため、残してあります。
120
120
 
121
121
 
122
122
 

1

テキスト修正

2020/01/18 06:51

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -60,9 +60,9 @@
60
60
 
61
61
 
62
62
 
63
- df_count["_協賛会社Set"] = [set(x) for x in df_count["_協賛会社list"]]
63
+ df_count["_協賛会社set"] = [set(x) for x in df_count["_協賛会社list"]]
64
64
 
65
- df_count["協賛会社数"] = [len(s) for s in df_count["_協賛会社Set"]]
65
+ df_count["協賛会社数"] = [len(s) for s in df_count["_協賛会社set"]]
66
66
 
67
67
 
68
68
 
@@ -98,7 +98,7 @@
98
98
 
99
99
  ----------
100
100
 
101
- _協賛会社list _協賛会社Set 協賛会社数
101
+ _協賛会社list _協賛会社set 協賛会社数
102
102
 
103
103
  開催(西暦)
104
104