我有一张用Pandas制作的桌子,如下所示:

Input:

df = pd.DataFrame()
df["ID"] = [111,222,333]
df["TYPE"] = ["A", "A", "C"]
df["VAL_1"] = [1,3,0]
df["VAL_2"] = [0,0,1]

Df:

ID   | TYPE  | VAL_1 | VAL_2
-----|-------|-------|-------
111  | A     |  1    | 0 
222  | A     |  3    | 0
333  | C     |  0    | 1

我需要使用如下代码创建PIVOT_TABLE:

df_pivot = pd.pivot_table(df, 
                          values=['VAL_1', 'VAL_2'],
                          index=['ID'],
                          columns='TYPE', 
                          fill_value=0)
df_pivot.columns = df_pivot.columns.get_level_values(1)  + '_' + df_pivot.columns.get_level_values(0)
df_pivot = df_pivot.reset_index()

Df_Pivot(上述代码的结果):

enter image description here

Requirements:

  • 输入DF在"TYPE"列中应具有下列值:A、B、C.
  • 然而,输入df是SQL中某些查询的结果,所以有时"type"列中可能缺少一些值(A、B、C).
  • 100

Output:个 我需要下面这样的东西:

ID A_VAL_1 C_VAL_1 A_VAL_2 C_VAL_2 B_VAL_1 B_VAL_2
111 1 0 0 0 0 0
222 3 0 0 0 0 0
333 0 0 0 0 0 0

正如您可以看到的,值"B"不在列"type"的输入df中,因此在df_vot中创建了用"B"(B_val_1,B_val_2)填充0的列.

我如何在Python Pandas中做到这一点?

推荐答案

pivot_table中使用Categoricalobserved=False, dropna=False参数:

df['TYPE'] = pd.Categorical(df['TYPE'], categories=['A', 'B', 'C'])

df_pivot = pd.pivot_table(df, 
                          values=['VAL_1', 'VAL_2'],
                          index=['ID'],
                          columns='TYPE', 
                          observed=False, dropna=False,
                          fill_value=0)
df_pivot.columns = df_pivot.columns.get_level_values(1).astype(str)  + '_' + df_pivot.columns.get_level_values(0)
df_pivot = df_pivot.reset_index()

输出:

    ID  A_VAL_1  B_VAL_1  C_VAL_1  A_VAL_2  B_VAL_2  C_VAL_2
0  111        1        0        0        0        0        0
1  222        3        0        0        0        0        0
2  333        0        0        0        0        0        1

Python相关问答推荐

替换字符串中的多个重叠子字符串

如何比较numPy数组中的两个图像以获取它们不同的像素

Django mysql图标不适用于小 case

管道冻结和管道卸载

NP.round解算数据后NP.unique

如何在WSL2中更新Python到最新版本(3.12.2)?

不允许访问非IPM文件夹

从嵌套的yaml创建一个嵌套字符串,后面跟着点

无论输入分辨率如何,稳定扩散管道始终输出512 * 512张图像

* 动态地 * 修饰Python中的递归函数

Python全局变量递归得到不同的结果

基于行条件计算(pandas)

Maya Python脚本将纹理应用于所有对象,而不是选定对象

Python Pandas—时间序列—时间戳缺失时间精确在00:00

pysnmp—lextudio使用next()和getCmd()生成器导致TypeError:tuple对象不是迭代器''

当条件满足时停止ODE集成?

mdates定位器在图表中显示不存在的时间间隔

如何使用加速广播主进程张量?

如何批量训练样本大小为奇数的神经网络?

在Django REST框架中定义的URL获得404分