如何将数据帧转换为整洁的形式(unpivot)?

我有以下数据框df = pd.read_excel('...'):


Date     Id V1  V2  V3

2020-1-1  1 10 100 NaN

2020-1-1  2 20 120  23

2020-1-1  3 11 101 NaN

我需要将其转换为


Date      Name Value

2020-1-1  1_V1    10

2020-1-1  1_V2   100

2020-1-1  2_V1    20

2020-1-1  2_V2   120

2020-1-1  2_V3    23

2020-1-1  3_V1    11

2020-1-1  3_V2   101

该列是、、等的列名称'Name'的串联。这些值将被忽略。IdV1V2V3NaN


如何使用dataframe功能来实现它?


HUX布斯
浏览 99回答 2
2回答

万千封印

让我们尝试一下melts = df.melt(['Date','Id']).dropna()s['name'] = s.pop('variable') +'_'+ s.pop('Id').astype(str)s       Date  value  name0  2020-1-1   10.0  V1_11  2020-1-1   20.0  V1_22  2020-1-1   11.0  V1_33  2020-1-1  100.0  V2_14  2020-1-1  120.0  V2_25  2020-1-1  101.0  V2_37  2020-1-1   23.0  V3_2

料青山看我应如是

你可以这样做df.meltdf1 = df.melt(['Date','Id']).dropna()df1 = df1.assign(Name=df1.Id.astype(str) + '_' + df1.variable)df1[['Date','Name','value']]输出       Date  Name  value0  2020-1-1  1_V1   10.01  2020-1-1  2_V1   20.02  2020-1-1  3_V1   11.03  2020-1-1  1_V2  100.04  2020-1-1  2_V2  120.05  2020-1-1  3_V2  101.07  2020-1-1  2_V3   23.0
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python