我有一个以下数据框(df),如下所示:
是否可以将我的(df)重塑为(df1),如下所示:
我提供了我的代码示例,但它不起作用。
感谢这里的任何通过或建议。
非常感谢
我的代码示例在这里:
data = {'Source': ['Rainfall', 'Inflow', 'SWCD', 'SWCD','Rainfall','Inflow', 'SP1', 'SP1'],
'Target': ['SWCD', 'SWCD', 'Evp', 'Outflow','SP1','SP1', 'Evp', 'Overflow']}
df = pd.DataFrame(data)
df1 = df.loc[:, ["Source", "Target"]]
df1 = df.values.flatten()
df.set_index('Target').T
我认为这可能会有所帮助
# First you need to swap the columns values for columns provided in a list
for col in ['SWCD', 'SP1']:
mask = df['Target'] == col
df.loc[mask, ['Source', 'Target']] = (df.loc[mask, ['Target', 'Source']].values)
# Then set index and transpose
df1 = df.set_index('Source').T
另一个没有循环的通用选项:
vals = ['SWCD', 'SP1']
tmp = df.mask(df['Target'].isin(vals)).fillna(df.rename(columns={'Target': 'Source', 'Source': 'Target'}))
out = pd.DataFrame(columns=pd.MultiIndex.from_frame(tmp))
输出(作为图像,因为它只是一个 MultiIndex):
替代输出:
tmp.set_index('Source').T
输出:
Source SWCD SWCD SWCD SWCD SP1 SP1 SP1 SP1
Target Rainfall Inflow Evp Outflow Rainfall Inflow Evp Overflow