次の形式のデータフレームがあります。
列名を変更し、データフレームを次の形式に再配置したい:-
以下のコードを試して、列名をオブジェクトからリストに変換してから、文字列を削除して分割しました。しかし、そうした後もまだ空白があります。理由はわかりません。
df_col_list=df.columns.tolist()
list =[]
for elem in df_col_list:
list.extend(elem.strip().split(':'))
list
正規表現に移動して列名を置き換え、希望する最終的なデータフレーム形式でID列を入力します。
well_pattern=re.compile(r'[A-Z]{4}\d{4}')
for item_list in list:
wellname=re.findall(well_pattern,item_list)
for n in wellname:
fld, well_no= n[:4], int(n[4:8])
item_list = item_list.replace(n, '%s_%d_0' % (fld, well_no))
print(item_list)
'MNIF0001'を 'MNIF_1_0'に変更するために機能しました。しかし、この出力を使用して、最終的なデータフレーム形式で新しい列を埋めるにはどうすればよいですか。
私は今立ち往生していて、どうすればいいのかわかりません。助けてください
前もって感謝します
グループを照合するための最初のパターンを変更し、新しいヘルパーにr'([A-Z]{4})(\d{4})(.+)'
使用Series.str.extract
しDataFrame
ます-2番目の列を整数に変換し、結合して割り当て直します。
次に、に使用Series.str.split
しMultiIndex
、DataFrame.stack
データクレンジングによって形状を変更します- DataFrame.rename_axis
、DataFrame.reset_index
およびDataFrame.sort_values
:
df = pd.DataFrame({
'MNIF0001:w':[2] * 5,
'MNIF0010:w':[4] * 5,
'MNIF0001:f':[6] * 5,
'MNIF0010:f':[8] * 5,
}, index=['01-Feb-63','01-Mar-63','01-Apr-63','01-May-63','01-Jun-63'])
df.index.name = 'date'
print (df)
MNIF0001:w MNIF0010:w MNIF0001:f MNIF0010:f
date
01-Feb-63 2 4 6 8
01-Mar-63 2 4 6 8
01-Apr-63 2 4 6 8
01-May-63 2 4 6 8
01-Jun-63 2 4 6 8
well_pattern=re.compile(r'([A-Z]{4})(\d{4})(.+)')
df1 = df.columns.to_series().str.extract(well_pattern)
print (df1)
0 1 2
MNIF0001:w MNIF 0001 :w
MNIF0010:w MNIF 0010 :w
MNIF0001:f MNIF 0001 :f
MNIF0010:f MNIF 0010 :f
df.columns = df1[0] + '_' + df1[1].astype(int).astype(str) + '_0' + df1[2]
print (df)
MNIF_1_0:w MNIF_10_0:w MNIF_1_0:f MNIF_10_0:f
date
01-Feb-63 2 4 6 8
01-Mar-63 2 4 6 8
01-Apr-63 2 4 6 8
01-May-63 2 4 6 8
01-Jun-63 2 4 6 8
df.columns = df.columns.str.split(':', expand=True)
df = df.stack(0).rename_axis(('date','ID')).reset_index().sort_values(['ID','date'])
print (df)
date ID f w
4 01-Apr-63 MNIF_10_0 8 4
0 01-Feb-63 MNIF_10_0 8 4
8 01-Jun-63 MNIF_10_0 8 4
2 01-Mar-63 MNIF_10_0 8 4
6 01-May-63 MNIF_10_0 8 4
5 01-Apr-63 MNIF_1_0 6 2
1 01-Feb-63 MNIF_1_0 6 2
9 01-Jun-63 MNIF_1_0 6 2
3 01-Mar-63 MNIF_1_0 6 2
7 01-May-63 MNIF_1_0 6 2
編集:ID
列を操作columns
する必要がある場合は、ID
次の場所にのみ移動してください:
df.columns = df.columns.str.split(':', expand=True)
df = df.stack(0).rename_axis(('date','ID')).reset_index().sort_values(['ID','date'])
well_pattern=re.compile(r'([A-Z]{4})(\d{4})')
df1 = df['ID'].str.extract(well_pattern)
df['ID'] = df1[0] + '_' + df1[1].astype(int).astype(str) + '_0'
print (df)
date ID f w
4 01-Apr-63 MNIF_1_0 6 2
0 01-Feb-63 MNIF_1_0 6 2
8 01-Jun-63 MNIF_1_0 6 2
2 01-Mar-63 MNIF_1_0 6 2
6 01-May-63 MNIF_1_0 6 2
5 01-Apr-63 MNIF_10_0 8 4
1 01-Feb-63 MNIF_10_0 8 4
9 01-Jun-63 MNIF_10_0 8 4
3 01-Mar-63 MNIF_10_0 8 4
7 01-May-63 MNIF_10_0 8 4
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加