トリッキーな処理ですが、正規表現を駆使することで、希望の形に近い変換は可能です。
まずはそのまま実行して動きを確認し、あとはじっくりと解読してみてください。
Python
1import re
2import pandas as pd
3
4df = pd.DataFrame([
5 ['1', '位置図'],
6 ['2~3', '平面図(1)~(2)'],
7 ['4~8', '縦断図(その1)~(その5)']],
8 columns=['図番', '図面名'])
9
10print(df)
11
12df_out = pd.DataFrame(index=[], columns=df.columns)
13for index, row in df.iterrows():
14 nums = [int(x) for x in re.findall(r'\d+', row['図番'])]
15 if len(nums) <= 1:
16 df_out = df_out.append(df[index:index+1], ignore_index=True)
17 continue
18 zu_name = re.findall(r'^(.+?)(', row['図面名'])[0]
19 zu_prefix = re.findall(r'((.*?)\d+)', row['図面名'])[0]
20 zu_num = [int(x) for x in re.findall(r'(.*?(\d+))', row['図面名'])][0]
21 for num in range(nums[0], nums[1]+1):
22 df_out = df_out.append(pd.Series(
23 [str(num), '{}({}{})'.format(zu_name, zu_prefix ,zu_num)],
24 index=df.columns), ignore_index=True)
25 zu_num = zu_num + 1
26
27print(df_out)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/24 00:21