開始的df如下:
company metric time data
x X10384 M1 100
x X10384 M2 100
x X10384 M3 100
y X10456 M4 200
y X10456 M5 200
y X10456 M6 200
我需要能夠根據時間維度的值合并這些行。基本上,“M1、M2、M3”將包含 Q1,“M4、M5、M6”將包含 Q2,依此類推。
生成的 df 將需要如下所示:
company metric time data
x X10384 Q1 300
y X10456 Q2 600
同樣,如果從 df 開始,我將需要能夠將時間分成幾個月并將資料分成相等的三個,就像在初始 df 中一樣。
將如何嘗試像上面那樣轉換這些資料?以下是我的參考起點:
quarters = ['Q1', 'Q2']
months = ['M1','M2','M3','M4','M5','M6']
for time in df['time']:
if time in quarters:
[insert transformation into individual months]
elif time in months:
[insert transformation into quarters]
uj5u.com熱心網友回復:
根據您的資料創建資料框:
data = {'Company' : ['x', 'x', 'x', 'y', 'y', 'y'],
'Metric' : ['X10384', 'X10384', 'X10384', 'X10456', 'X10456', 'X10456'],
'time': ['M1', 'M2', 'M3', 'M4', 'M5', 'M6'],
'data': [100, 100, 100, 200, 200, 200]}
df = pd.DataFrame(data)
然后創建一個字典并每次映射它:
dict = {'M1': 'Q1', 'M2' : 'Q1', 'M3' : "Q1", 'M4' : 'Q2', 'M5' : 'Q2', 'M6' : 'Q2'}
df['time'] = df['time'].map(dict)
groupby 會給你最終的結果:
df.groupby(['Company','Metric','time']).sum().reset_index()
uj5u.com熱心網友回復:
從time列中提取數字,然后將它們轉換為季度數。最后,groupby_sum做一個簡單的作業:
# Convert M1, M2, M3, M4, M5, M6 to Q1, Q1, Q1, Q2, Q2, Q2
to_quarter = df['time'].str[1:].astype(int).floordiv(4).add(1).astype(str).radd('Q')
out = df.assign(time=to_quarter).groupby(['company', 'metric', 'time']) \
.sum().reset_index()
輸出:
>>> out
company metric time data
0 x X10384 Q1 300
1 y X10456 Q2 600
uj5u.com熱心網友回復:
從幾個月到幾個季度
輸入
company metric time data
x X10384 M1 100
x X10384 M2 100
x X10384 M3 100
y X10456 M4 200
y X10456 M5 200
y X10456 M6 200
以月為鍵創建一個字典,以季度為單位的值,并用鍵映射列
months_to_quarters_dict = {'M1': 'Q1', 'M2' : 'Q1', 'M3' : "Q1", 'M4' : 'Q2', 'M5' : 'Q2', 'M6' : 'Q2'}
df['time'] = df['time'].map(months_to_quarters_dict)
輸出 (1a)
company metric time data
x X10384 Q1 100
x X10384 Q1 100
x X10384 Q1 100
y X10456 Q2 200
y X10456 Q2 200
y X10456 Q2 200
使用 groupby().agg('sum') 得到濃縮的 df
df.groupby(['Company','Metric','time'], as_index=False).agg('sum')
輸出 (1b)
company metric time data
x X10384 Q1 300
y X10456 Q2 600
從季度到幾個月
輸入
company metric time data
x X10384 Q1 300
y X10456 Q2 600
以季度為鍵創建字典以獲取以月為單位的值,并使用鍵映射列
quarters_to_months_dict = {'Q1' : ['M1', 'M2', 'M3'], 'Q2' : ['M4', 'M5', 'M6']}
df['time'] = df['time'].map(months_to_quarters_dict)
輸出 (2a)
company metric time data
0 x X10384 ['M1', 'M2', 'M3'] 300
1 y X10456 ['M4', 'M5', 'M6'] 600
使用explode on time 列拆分行并將資料列除以3,以在一個季度中為每個月產生相等的數量
df = df.explode('time')
df['data'] = df['data].div(3)
輸出 (2b)
company metric time data
x X10384 M1 100
x X10384 M2 100
x X10384 M3 100
y X10456 M4 200
y X10456 M5 200
y X10456 M6 200
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/419221.html
標籤:
