python中的流线型列

2024-06-29 00:47:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我花了几周的时间来建造以下建筑:

我的数据帧如下所示:

enter image description here

我想构建以下内容:

enter image description here

我尝试了以下方法,但不起作用:

formatted_df = pd.melt(dfNull,
                   ["registro"],
                   var_name="Atributo",
                   value_name="Valor")

Tags: 数据方法namedfvaluevar时间valor
3条回答

搜索pandas.meltPandas.melt链接,未找到dfNull选项 我发现了一个类似的代码:

formatted_df = pd.melt(df,["religion"],var_name="income",value_name="freq")
formatted_df = formatted_df.sort_values(by=["religion"])
formatted_df.head(10)

基于此链接pandas.melt example case

尝试以这种方式格式化代码,看看从“dfNull”到“df”的更改是否有效

formatted_df = pd.melt(df,
               ["registro"],
               var_name="Atributo",
               value_name="Valor")

尝试指定id_varsvalue_vars

>>> df = pd.DataFrame({'ID':range(5),'A':range(0,5),'B':['Z','Y','X','W','V']})
>>> df
   ID  A  B
0   0  0  Z
1   1  1  Y
2   2  2  X
3   3  3  W
4   4  4  V
>>> df.melt(id_vars=['ID'], value_vars=['A','B'], var_name='var_name', value_name='val_name')
   ID var_name val_name
0   0        A     0
1   1        A     1
2   2        A     2
3   3        A     3
4   4        A     4
5   0        B     Z
6   1        B     Y
7   2        B     X
8   3        B     W
9   4        B     V

我认为您的问题是“Registro”在数据帧中大写,但在melt命令中没有大写

这似乎有效:

df = pd.DataFrame({'Registro': [1, 2, 3], 
                   '100 mucho actividad': [None, None, 1],
                   '120 mil conformar': [1, 1, None],
                   '190 solo recibir': [1, 1, 1]})

这将生成以下数据帧:

            Registro    100 mucho actividad 120 mil conformar    190 solo recibir
0                  1                    NaN               1.0                   1
1                  2                    NaN               1.0                   1
2                  3                    1.0               NaN                   1

现在我们可以melt(我使用“Registro”作为新数据帧的索引)还需要注意的是,我删除了产生结果的NaN列,并对索引进行排序,使其符合您期望的顺序

formatted_df = pd.melt(df,
                       ["Registro"],
                       var_name="Atributo",
                       value_name="Valor").dropna().set_index('Registro')

formatted_df.sort_index(inplace=True)

formatted_df

结果:

                       Atributo     Valor
Registro        
       1      120 mil conformar     1.0
       1       190 solo recibir     1.0
       2      120 mil conformar     1.0
       2       190 solo recibir     1.0
       3    100 mucho actividad     1.0
       3       190 solo recibir     1.0

相关问题 更多 >