Python 在熊猫数据帧中,如何;“扁平化”;变量为;“不加奶油的”;使用它们的索引进入新列?
我在pandas DataFrames中有一些数据,这些数据是通过文件访问的。大多数数据都是简单的变量,可以有不同的值。然而,有些变量是数字数组。为了加载这些数组,可以选择展平变量 因此,例如,数组变量Python 在熊猫数据帧中,如何;“扁平化”;变量为;“不加奶油的”;使用它们的索引进入新列?,python,pandas,dataframe,flatten,Python,Pandas,Dataframe,Flatten,我在pandas DataFrames中有一些数据,这些数据是通过文件访问的。大多数数据都是简单的变量,可以有不同的值。然而,有些变量是数字数组。为了加载这些数组,可以选择展平变量 因此,例如,数组变量jet_tagWeightBin可以具有不同数量的值,这取决于物理事件中喷射的数量。当“展平”时,通过使用索引,\uuuuuu数组\u索引,可以访问给定物理事件中每个喷流的各种值 下面是加载三个物理事件的情况。您可以看到,对于每个物理事件,有一个HT\u jets值,但有多个jet\u tagWe
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
,可以用于此)。当我按照你的建议做的时候,它会破坏我的所有其他变量列。我应该如何进行?我是否应该为数组变量创建一个单独的数据框,然后尝试将其与单值变量的数据框合并?我在文章的末尾又添加了几列来说明这一点。