为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

HUX布斯 2023-09-02 15:55:55
我有以下数据框df = pd.read_excel('...'):Date     Id V1  V2  V32020-1-1  1 10 100 NaN2020-1-1  2 20 120  232020-1-1  3 11 101 NaN我需要将其转换为Date      Name Value2020-1-1  1_V1    102020-1-1  1_V2   1002020-1-1  2_V1    202020-1-1  2_V2   1202020-1-1  2_V3    232020-1-1  3_V1    112020-1-1  3_V2   101该列是、、等的列名称'Name'的串联。这些值将被忽略。IdV1V2V3NaN如何使用dataframe功能来实现它?
查看完整描述

2 回答

?
万千封印

TA贡献1891条经验 获得超3个赞


让我们尝试一下melt


s = df.melt(['Date','Id']).dropna()

s['name'] = s.pop('variable') +'_'+ s.pop('Id').astype(str)

s

       Date  value  name

0  2020-1-1   10.0  V1_1

1  2020-1-1   20.0  V1_2

2  2020-1-1   11.0  V1_3

3  2020-1-1  100.0  V2_1

4  2020-1-1  120.0  V2_2

5  2020-1-1  101.0  V2_3

7  2020-1-1   23.0  V3_2


查看完整回答
反对 回复 2023-09-02
?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

你可以这样做df.melt

df1 = df.melt(['Date','Id']).dropna()

df1 = df1.assign(Name=df1.Id.astype(str) + '_' + df1.variable)

df1[['Date','Name','value']]

输出


       Date  Name  value

0  2020-1-1  1_V1   10.0

1  2020-1-1  2_V1   20.0

2  2020-1-1  3_V1   11.0

3  2020-1-1  1_V2  100.0

4  2020-1-1  2_V2  120.0

5  2020-1-1  3_V2  101.0

7  2020-1-1  2_V3   23.0


查看完整回答
反对 回复 2023-09-02
  • 2 回答
  • 0 关注
  • 98 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信