Python 在熊猫数据帧中,如何;“扁平化”;变量为;“不加奶油的”;使用它们的索引进入新列?

Python 在熊猫数据帧中,如何;“扁平化”;变量为;“不加奶油的”;使用它们的索引进入新列?,python,pandas,dataframe,flatten,Python,Pandas,Dataframe,Flatten,我在pandas DataFrames中有一些数据,这些数据是通过文件访问的。大多数数据都是简单的变量,可以有不同的值。然而,有些变量是数字数组。为了加载这些数组,可以选择展平变量 因此,例如,数组变量jet_tagWeightBin可以具有不同数量的值,这取决于物理事件中喷射的数量。当“展平”时,通过使用索引,\uuuuuu数组\u索引,可以访问给定物理事件中每个喷流的各种值 下面是加载三个物理事件的情况。您可以看到,对于每个物理事件,有一个HT\u jets值,但有多个jet\u tagWe

我在pandas DataFrames中有一些数据,这些数据是通过文件访问的。大多数数据都是简单的变量,可以有不同的值。然而,有些变量是数字数组。为了加载这些数组,可以选择展平变量

因此,例如,数组变量
jet_tagWeightBin
可以具有不同数量的值,这取决于物理事件中喷射的数量。当“展平”时,通过使用索引,
\uuuuuu数组\u索引
,可以访问给定物理事件中每个喷流的各种值

下面是加载三个物理事件的情况。您可以看到,对于每个物理事件,有一个
HT\u jets
值,但有多个
jet\u tagWeightBin
值,可以使用其索引访问:

|  |HT_jets|jet_tagWeightBin|__array_index|
|--|-------|----------------|-------------|
|0 |319676 |1               |0            |     |<---------- 1st event
|1 |319676 |5               |1            |     |
|2 |319676 |1               |2            |     |
|3 |319676 |5               |3            |     |
|4 |200476 |5               |0            |        |<------- 2nd event
|5 |200476 |2               |1            |        |
|6 |200476 |1               |2            |        |
|7 |200476 |1               |3            |        |
|8 |520111 |5               |0            |           |<---- 3rd event
|9 |520111 |1               |1            |           |
|10|520111 |2               |2            |           |
|11|520111 |5               |3            |           |
|12|520111 |5               |4            |           |
|13|520111 |2               |5            |           |
现在,我想做的是去掉这个
\uuu数组\u索引
,通过添加一系列新的单值变量,如
jet\u tagWeightBin\u 0
jet\u tagWeightBin\u 1
jet\u tagWeightBin\u 2
,…,达到所需的数量。所以,我想谈谈这样的事情:

|  |HT_jets|jet_tagWeightBin_0|jet_tagWeightBin_1|jet_tagWeightBin_2|jet_tagWeightBin_3|jet_tagWeightBin_4|jet_tagWeightBin_5|
|--|-------|------------------|------------------|------------------|------------------|------------------|------------------|
|0 |319676 |1                 |5                 |1                 |5                 |NaN               |NaN               |
|1 |200476 |5                 |2                 |1                 |1                 |NaN               |NaN               |
|2 |520111 |5                 |1                 |2                 |5                 |5                 |2                 |
df["new_name"] = df.apply(lambda row: "jet_tagWeightBin_" + str(row["__array_index"]), axis = 1)
我不确定这种类型的操作是什么,但我确信这一定是一件简单的事情。我只是不知道怎么做

无论如何,这是一次尝试的开始:

我可以添加一个具有适当名称的新列,如下所示:

|  |HT_jets|jet_tagWeightBin_0|jet_tagWeightBin_1|jet_tagWeightBin_2|jet_tagWeightBin_3|jet_tagWeightBin_4|jet_tagWeightBin_5|
|--|-------|------------------|------------------|------------------|------------------|------------------|------------------|
|0 |319676 |1                 |5                 |1                 |5                 |NaN               |NaN               |
|1 |200476 |5                 |2                 |1                 |1                 |NaN               |NaN               |
|2 |520111 |5                 |1                 |2                 |5                 |5                 |2                 |
df["new_name"] = df.apply(lambda row: "jet_tagWeightBin_" + str(row["__array_index"]), axis = 1)
其结果是:

|  |HT_jets|jet_tagWeightBin|__array_index|new_name          |
|--|-------|----------------|-------------|------------------|
|0 |319676 |1               |0            |jet_tagWeightBin_0|
|1 |319676 |5               |1            |jet_tagWeightBin_1|
|2 |319676 |1               |2            |jet_tagWeightBin_2|
|3 |319676 |5               |3            |jet_tagWeightBin_3|
|4 |200476 |5               |0            |jet_tagWeightBin_0|
|5 |200476 |2               |1            |jet_tagWeightBin_1|
|6 |200476 |1               |2            |jet_tagWeightBin_2|
|7 |200476 |1               |3            |jet_tagWeightBin_3|
|8 |520111 |5               |0            |jet_tagWeightBin_0|
|9 |520111 |1               |1            |jet_tagWeightBin_1|
|10|520111 |2               |2            |jet_tagWeightBin_2|
|11|520111 |5               |3            |jet_tagWeightBin_3|
|12|520111 |5               |4            |jet_tagWeightBin_4|
|13|520111 |2               |5            |jet_tagWeightBin_5|
这就是我的处境。我欢迎您的指导。:)


编辑:为了清楚起见,我正在处理许多变量。以下是数据中的更多列:

|  |eventNumber|Mjj_MindR   |HT_jets|jet_tagWeightBin|__array_index|
|--|-----------|------------|-------|----------------|-------------|
|0 |446427     |98896.421875|319676 |1               |0            |     |<---------- 1st event
|1 |446427     |98896.421875|319676 |5               |1            |     |
|2 |446427     |98896.421875|319676 |1               |2            |     |
|3 |446427     |98896.421875|319676 |5               |3            |     |
|4 |446650     |29691.271484|200476 |5               |0            |        |<------- 2nd event
|5 |446650     |29691.271484|200476 |2               |1            |        |
|6 |446650     |29691.271484|200476 |1               |2            |        |
|7 |446650     |29691.271484|200476 |1               |3            |        |
|8 |446707     |57697.246094|520111 |5               |0            |          |<---- 3rd event
|9 |446707     |57697.246094|520111 |1               |1            |          |
|10|446707     |57697.246094|520111 |2               |2            |          |
|11|446707     |57697.246094|520111 |5               |3            |          |
|12|446707     |57697.246094|520111 |5               |4            |          |
|13|446707     |57697.246094|520111 |2               |5            |          |
|事件编号| Mjj|U MindR | HT|U jets | jet | tagWeightBin |数组|索引|
|--|-----------|------------|-------|----------------|-------------|

|0 | 446427 | 98896.421875 | 319676 | 1 | 0 | |这是一个关键问题

newDF = df.pivot(columns='array_index', values='jet_tagWeightBin', index='HT_jets')
然后重命名这些列

这使得:

array_index    0    1    2    3    4    5
HT_jets
200476       5.0  2.0  1.0  1.0  NaN  NaN
319676       1.0  5.0  1.0  5.0  NaN  NaN
520111       5.0  1.0  2.0  5.0  5.0  2.0

这是一个关键问题

newDF = df.pivot(columns='array_index', values='jet_tagWeightBin', index='HT_jets')
然后重命名这些列

这使得:

array_index    0    1    2    3    4    5
HT_jets
200476       5.0  2.0  1.0  1.0  NaN  NaN
319676       1.0  5.0  1.0  5.0  NaN  NaN
520111       5.0  1.0  2.0  5.0  5.0  2.0

嘿,谢谢,这似乎接近我需要的了。因此,如前所述,我有一大堆变量,每个事件都有一个值,而不仅仅是
HT\u jets
(不能假设它本身是每个事件唯一的数字——我有变量
eventNumber
,可以用于此)。当我按照你的建议做的时候,它会破坏我的所有其他变量列。我应该如何进行?我应该为数组变量设置一个单独的数据框,然后尝试将其与单值变量的数据框合并吗?我在文章的末尾又添加了几列来说明。嘿,谢谢,这似乎接近我所需要的。因此,如前所述,我有一大堆变量,每个事件都有一个值,而不仅仅是
HT\u jets
(不能假设它本身是每个事件唯一的数字——我有变量
eventNumber
,可以用于此)。当我按照你的建议做的时候,它会破坏我的所有其他变量列。我应该如何进行?我是否应该为数组变量创建一个单独的数据框,然后尝试将其与单值变量的数据框合并?我在文章的末尾又添加了几列来说明这一点。