窄到宽数据

问题描述 投票:0回答:2

我有一个以下数据框(df),如下所示:

df

是否可以将我的(df)重塑为(df1),如下所示:

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
python-3.x pandas dataframe reshape
2个回答
0
投票

我认为这可能会有所帮助

# 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


0
投票

另一个没有循环的通用选项:

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
© www.soinside.com 2019 - 2024. All rights reserved.