gpt4 book ai didi

python - pd.melt() 一个字典/一系列数据帧

转载 作者:行者123 更新时间:2023-12-04 20:03:12 25 4
gpt4 key购买 nike

例如,我有以下 map :

  {'df1': Jan    Feb    Mar
1 3 5
2 4 6
'df2': Jan Feb Mar
7 9 11
8 10 12
......}
我想要以下输出:
Jan  1
Jan 2
Feb 3
Feb 4
Mar 5
Mar 6
Jan 7
Jan 8
Feb 9
Feb 10
Mar 11
Mar 12

有谁知道是否可以这样做?
我尝试的是遍历 DataFrames 以尝试获取
  {'df1': Jan  1
Jan 2
Feb 3
Feb 4
Mar 5
Mar 6

'df2': Jan 7
Jan 8
Feb 9
Feb 10
Mar 11
Mar 12
通过使用
for x in dfMap:
df = pd.melt(list(x.values()))
然后尝试将其与 df1m =
pd.concat(df.values(), ignore_index=True)
这给了我错误
AttributeError: 'list' object has no attribute 'columns'
我对编程还很陌生,真的很想学习,如果有人能解释它是如何工作的,以及为什么 list 或 dict_values 对象没有属性“列”,那就太好了。
提前致谢!

最佳答案

您可以连接和堆叠:

out = pd.concat(d.values()).stack().droplevel(0)
或者:
out = pd.concat(d.values()).melt()

例子:
df = pd.DataFrame(np.arange(1,10).reshape(-1,3),columns=['Jan','Feb','Mar'])
d = {}
for e,i in df.iterrows():
d[f"df{e+1}"] = i.to_frame().T
print(d,'\n')

out = pd.concat(d.values()).stack().droplevel(0)
print(out)
    {'df1':    Jan  Feb  Mar
0 1 2 3, 'df2': Jan Feb Mar
1 4 5 6, 'df3': Jan Feb Mar
2 7 8 9}

Jan 1
Feb 2
Mar 3
Jan 4
Feb 5
Mar 6
Jan 7
Feb 8
Mar 9
dtype: int32
melt :
out = pd.concat(d.values()).melt()
print(out)

variable value
0 Jan 1
1 Jan 4
2 Jan 7
3 Feb 2
4 Feb 5
5 Feb 8
6 Mar 3
7 Mar 6
8 Mar 9
编辑,对于已编辑的问题,请尝试:
out = pd.concat(d).stack().sort_index(level=[0,-1]).droplevel([0,1])

下面的例子:
df = pd.DataFrame(np.arange(1,13).reshape(3,-1).T,columns=['Jan','Feb','Mar'])
d = {}
for e,i in df.groupby(df.index//2):
d[f"df{e+1}"] = i
print(d,'\n')

out = pd.concat(d).stack().sort_index(level=[0,-1]).droplevel([0,1])
print(out)

{'df1': Jan Feb Mar
0 1 5 9
1 2 6 10, 'df2': Jan Feb Mar
2 3 7 11
3 4 8 12}

Jan 1
Jan 2
Feb 5
Feb 6
Mar 9
Mar 10
Jan 3
Jan 4
Feb 7
Feb 8
Mar 11
Mar 12
dtype: int32
或者您也可以将数据框名称转换为 int 然后排序:
out = (pd.concat(d.values(),keys=[int(key[2:]) for key in d.keys()])
.stack().sort_index(level=[0,-1]).droplevel([0,1]))

关于python - pd.melt() 一个字典/一系列数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65547087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com