我試圖將代表年-月(下面代碼中的“期間”列)的整數映射到代表年-季度(“DIST_PERIOD”列)的新列中。
例如,
202101、202102 和 202103 變為“20211”
202104、202105 和 202106 變為“20212”
等等。
我下面的代碼正在運行,但不是我想象的那樣。
df['DIST_PERIOD'] = np.where((str(df['Period'])[4:] == '01') | (str(df['Period'])[4:] == '02') | (str(df['Period'])[4:] == '03'), str(df['Period'])[:4] '1', df['DIST_PERIOD'])
df['DIST_PERIOD'] = np.where((str(df['Period'])[4:] == '04') | (str(df['Period'])[4:] == '05') | (str(df['Period'])[4:] == '06'), str(df['Period'])[:4] '2', df['DIST_PERIOD'])
df['DIST_PERIOD'] = np.where((str(df['Period'])[4:] == '07') | (str(df['Period'])[4:] == '08') | (str(df['Period'])[4:] == '09'), str(df['Period'])[:4] '3', df['DIST_PERIOD'])
df['DIST_PERIOD'] = np.where((str(df['Period'])[4:] == '10') | (str(df['Period'])[4:] == '11') | (str(df['Period'])[4:] == '12'), str(df['Period'])[:4] '4', df['DIST_PERIOD'])
不知道如何更正我的 str() 以便我正確捕獲每行的最后兩個字符。
uj5u.com熱心網友回復:
更好的方法是將列轉換為日期時間,然后訪問并組合日期時間屬性year和quarter.
month_year = pd.to_datetime(df['Period'], format="%Y%m")
df['DIST_PERIOD'] = month_year.dt.year.astype(str) month_year.dt.quarter.astype(str)
編輯
另外一個選項
month_year = pd.to_datetime(df['Period'], format="%Y%m")
df['DIST_PERIOD'] = month_year.dt.to_period("Q").dt.strftime('%Y%q')
uj5u.com熱心網友回復:
不確定這里是否np.where是一個不錯的選擇,而是使用mappandas 中的函式。
創建此映射的字典物件,例如: di= {'202101':'20211', '202102':'20211', '202103':'20211'}
同樣的方法,在上面的字典中添加更多的字典物件來創建映射物件。
之后這樣做:
df['yourcolumnnametobemapped'] = df['yourcolumnnametobemapped'].map(di)
注意:如果找不到所有映射物件,它將創建一個 NAN。如果您只想映射少數物件而其他物件保持不變,請使用:
df['yourcolumnnametobemapped'] = df['yourcolumnnametobemapped'].map(di).fillna(df['yourcolumnnametobemapped'])
uj5u.com熱心網友回復:
如果你想自動化它,你可以看看這樣的解決方案。您可能需要根據您的資料框來使用資料型別。在這里,我只是將列傳遞給函式并回傳一個新值。還假設你總是有 4 位數的年份和兩位數的月份
data='''yrmo
202101
202102
202103
202104
202105
202106
202109
202111'''
df = pd.read_csv(io.StringIO(data), sep=' \s ', engine='python')
def get_quarter(x):
mo = str(x)[-2:]
yr = str(x)[0:4]
if mo in ['01', '02', '03']:
return yr '1'
elif mo in ['04', '05', '06']:
return yr '2'
elif mo in ['07', '08', '09']:
return yr '3'
else:
return yr '4'
df['yrmo'].apply(get_quarter)
0 20211
1 20211
2 20211
3 20212
4 20212
5 20212
6 20213
7 20214
Name: yrmo, dtype: object
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/353455.html
下一篇:Python制作大型NxN矩陣
