python中的精简列

问题描述 投票:-1回答:3

我花了两个星期的时间来建立以下内容:

我的数据框如下:

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9Sb0p4cy5wbmcifQ==” alt =“在此处输入图像描述”>

并且我想构建以下内容:

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9RdGUzdi5wbmcifQ==” alt =“在此处输入图像描述”>

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

formatted_df = pd.melt(dfNull,
                   ["registro"],
                   var_name="Atributo",
                   value_name="Valor")
python pandas
3个回答
1
投票

尝试指定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

1
投票

[我认为您的问题是“ Registro”在您的DataFrame中大写,但在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]})

这将产生以下DataFrame:

            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

现在,我们可以融化了(我将“ Registro”用作新DataFrame的索引。)还要注意,我删除了结果的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

0
投票

搜索了pandas.melt Pandas.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")
© www.soinside.com 2019 - 2024. All rights reserved.