gpt4 book ai didi

python - 使用 Pandas 将多列取消列为行

转载 作者:太空狗 更新时间:2023-10-30 01:56:43 26 4
gpt4 key购买 nike

我有一个这样的 json 文件:

{
"A": {
"type1": [
2,
26,
288,
...
],
"type2": [
2,
3,
5,
...
],
"type3": [
23,
26,
288,
...
]
},
"B": {
"type1": [
2,
26,
288,
...
],
"type2": [
2,
3,
5,
...
],
"type3": [
23,
26,
288,
...
]
},
...
"K": {
"type1": [
2,
26,
288,
...
],
"type2": [
2,
3,
5,
...
],
"type3": [
23,
26,
288,
...
]
}
}

这是一个用于复制的示例字典(我有大约 20 列从 A 到 J,但只有 3 种类型:type1、type2、type3):

pd.DataFrame({'A': {'type1': ['32',
'21',
'43',
'43',
'43',
'43',
'43',
'43'],
'type2': [
0.133333333333333,
0.36666666666666703,
0.1,
0.30000000000000004,
0.16666666666666702,
0.033333333333333,
0.2,
0.066666666666666],
'type3': [
3,
9,
5,
1,
6,
2]},
'B': {'type1': [
'43',
'43',
'43',
'43',
'43'],
'type2': [
0.23333333333333303,
0.266666666666667,
0.30000000000000004,
0.5666666666666671,
0.16666666666666702,
0.266666666666667],
'type3': [
10,
6,
17,
7,
8,
9,
17,
5,
8]},
'C': {'type1': [
'43',
'43',
'43',
'43',
'43',
'43'],
'type2': [
5.23333333333333,
6.1,
5.4,
3.23333333333333,
17.4,
5.56666666666667,
10.4333333333333,
2.1],
'type3': [
183,
162,
97,
522,
167,
313,
63]},
})

给出这样的 df: enter image description here

我的 df 最后应该是这样的:

  type1  type2  type3
A 32 0.13 3
A 21 0.36 9
A
........
B
........
C
........
J

所以我转置了它: enter image description here但后来我不确定如何打开这些列表。每次尝试时,我都会遇到一些循环:

for x in df.index:
for y in df.loc[x]["type1"]:
df.iloc[index] = df.append({"index": x, "type": y}, ignore_index=True)
index += 1

这显然不是要走的路。

我想知道是否有更简单的方法,也许在我加载 json 时?

谢谢!

最佳答案

我在这里使用for循环.apply(pd.Series).stack是关键

df=df.T
l=[df[x].apply(pd.Series).stack() for x in df.columns]

s=pd.concat(l,1).reset_index(level=1,drop=True)
s.columns=df.columns

s
Out[347]:
type1 type2 type3
A 32 0.133333 3.0
A 21 0.366667 9.0
A 43 0.100000 5.0
A 43 0.300000 1.0
A 43 0.166667 6.0
A 43 0.033333 2.0
A 43 0.200000 NaN
A 43 0.066667 NaN
B 43 0.233333 10.0
B 43 0.266667 6.0
B 43 0.300000 17.0
B 43 0.566667 7.0
B 43 0.166667 8.0
B NaN 0.266667 9.0
B NaN NaN 17.0
B NaN NaN 5.0
B NaN NaN 8.0
C 43 5.233333 183.0
C 43 6.100000 162.0
C 43 5.400000 97.0
C 43 3.233333 522.0
C 43 17.400000 167.0
C 43 5.566667 313.0
C NaN 10.433333 63.0
C NaN 2.100000 NaN

关于python - 使用 Pandas 将多列取消列为行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48797183/

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