我见过很多关于数据透视表的问题.即使他们不知道他们询问数据透视表,他们通常也是.几乎不可能写出一个规范的问题和答案,其中包含了旋转的所有方面....
......但是我要试一试.
现有问题和答案的问题在于,问题通常集中在OP难以概括以便使用一些现有的良好答案的细微差别.但是,没有一个答案试图给出全面的解释(因为这是一项艰巨的任务)
从我的谷歌搜索中查看一些示例
pd.DataFrame.pivot因此,每当有人搜索时,pivot他们会得到零星的结果,而这些结果可能无法回答他们的具体问题.
您可能会注意到,我明显地将我的列和相关列值命名为与我将如何在下面的答案中进行调整相对应.请注意,以便熟悉哪些列名称可以从哪里获得您正在寻找的结果.
import numpy as np
import pandas as pd
from numpy.core.defchararray import add
np.random.seed([3,1415])
n = 20
cols = np.array(['key', 'row', 'item', 'col'])
arr1 = (np.random.randint(5, size=(n, 4)) // [2, 1, 2, 1]).astype(str)
df = pd.DataFrame(
add(cols, arr1), columns=cols
).join(
pd.DataFrame(np.random.rand(n, 2).round(2)).add_prefix('val')
)
print(df)
key row item col val0 val1
0 key0 row3 item1 col3 0.81 0.04
1 key1 …Run Code Online (Sandbox Code Playgroud) 拥有以下数据帧,
df = pd.DataFrame({'device_id' : ['0','0','1','1','2','2'],
'p_food' : [0.2,0.1,0.3,0.5,0.1,0.7],
'p_phone' : [0.8,0.9,0.7,0.5,0.9,0.3]
})
print(df)
Run Code Online (Sandbox Code Playgroud)
输出:
device_id p_food p_phone
0 0 0.2 0.8
1 0 0.1 0.9
2 1 0.3 0.7
3 1 0.5 0.5
4 2 0.1 0.9
5 2 0.7 0.3
Run Code Online (Sandbox Code Playgroud)
如何实现这种转变?
df2 = pd.DataFrame({'device_id' : ['0','1','2'],
'p_food_1' : [0.2,0.3,0.1],
'p_food_2' : [0.1,0.5,0.7],
'p_phone_1' : [0.8,0.7,0.9],
'p_phone_2' : [0.9,0.5,0.3]
})
print(df2)
Run Code Online (Sandbox Code Playgroud)
输出:
device_id p_food_1 p_food_2 p_phone_1 p_phone_2
0 0 0.2 0.1 0.8 0.9
1 1 0.3 0.5 0.7 0.5 …Run Code Online (Sandbox Code Playgroud)