回答編集履歴

1

Update

2022/09/19 15:16

投稿

melian
melian

スコア19825

test CHANGED
@@ -1,24 +1,21 @@
1
1
  ```python
2
2
  import pandas as pd
3
3
 
4
- df = pd.DataFrame(
4
+ df = pd.DataFrame(data={
5
- data={'A': ['1_あいうえお 2_かきく 3_さしすせそ 2_かきくけこ', '1_あいうえお 2_かきく 3_さしすせそ 2_かきくけこ 3_さしす']},
5
+ 'A': ['1_あいうえお 2_かきく 3_さしすせそ 2_かきくけこ',
6
+ '1_あいうえお 2_かきく 3_さしすせそ 2_かきくけこ 3_さしす']
6
- )
7
+ })
7
8
 
8
9
  #
9
- def update_to_latest(s):
10
- s = s.dropna()
11
- last = s.iloc[-1].split('_')[0]
10
+ df['B'] = df['A'].str.split(r'\s+', expand=True)\
12
- return s.groupby(s.str.extract(r'^(\d+)')[0], sort=False, group_keys=False)\
11
+ .apply(lambda x: x.groupby(x.str.extract(r'^(\d+_)')[0])
13
- .apply(lambda x: pd.Series(x.iloc[-1], index=x.index[:1]) if x.name == last else x)\
14
- .sort_index().str.cat(sep=' ')
12
+ .last().str.cat(sep=' '), axis=1)
15
13
 
16
- df['B'] = df['A'].str.split(r'\s+', expand=True).apply(update_to_latest, axis=1)
17
14
  print(df)
18
15
  ```
19
16
 
20
- | | A | B |
17
+ | | A | B |
21
- |---:|:---------------------------------------------------------|:--------------------------------------------|
18
+ |---:|:---------------------------------------------------------|:---------------------------------------|
22
- | 0 | 1_あいうえお 2_かきく 3_さしすせそ 2_かきくけこ | 1_あいうえお 2_かきくけこ 3_さしすせそ |
19
+ | 0 | 1_あいうえお 2_かきく 3_さしすせそ 2_かきくけこ | 1_あいうえお 2_かきくけこ 3_さしすせそ |
23
- | 1 | 1_あいうえお 2_かきく 3_さしすせそ 2_かきくけこ 3_さしす | 1_あいうえお 2_かきく 3_さしす 2_かきくけこ |
20
+ | 1 | 1_あいうえお 2_かきく 3_さしすせそ 2_かきくけこ 3_さしす | 1_あいうえお 2_かきくけこ 3_さしす |
24
21