我花了两个星期的时间来建立以下内容:
我的数据框如下:
<< 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")
尝试指定id_vars
和value_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”在您的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
搜索了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)
尝试用这种方式格式化代码,以查看从“ dfNull”到“ df”的更改是否有效
formatted_df = pd.melt(df,
["registro"],
var_name="Atributo",
value_name="Valor")