teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

コード修正

2020/07/29 07:47

投稿

8524ba23
8524ba23

スコア38352

answer CHANGED
@@ -21,20 +21,14 @@
21
21
  # NaNなどのリスト以外は要素が1個のSeriesに
22
22
  return pd.Series([info])
23
23
 
24
- # apply用
25
- def f_name(row):
26
- return to_sr(row['info'], 'name')
27
-
28
- # apply用
29
- def f_price(row):
30
- return to_sr(row['info'], 'price')
31
-
32
24
  # Seriesに展開
25
+ series = {}
26
+ for key in ['name', 'price']:
27
+ f = lambda row: to_sr(row['info'], key)
33
- s_n = df.apply(f_name, axis=1).stack().reset_index(level=1, drop=True)
28
+ series[key] = df.apply(f, axis=1).stack().reset_index(level=1, drop=True)
34
- s_p = df.apply(f_price, axis=1).stack().reset_index(level=1, drop=True)
35
29
 
36
- # 元dfに結合
30
+ # 各SeriesをDataFrameに結合し元dfに結合
37
- dfs = pd.DataFrame({'name':s_n, 'price':s_p})
31
+ dfs = pd.DataFrame(series)
38
32
  df = df.drop('info', axis=1).join(dfs).reset_index(drop=True)
39
33
  print(df)
40
34
  # id menu_id name price