Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pandas pos_explode-数组的最新列,但保留索引_Python_Arrays_Pandas - Fatal编程技术网

Python pandas pos_explode-数组的最新列,但保留索引

Python pandas pos_explode-数组的最新列,但保留索引,python,arrays,pandas,Python,Arrays,Pandas,我想在pandas中使用类似pos_explode的东西,即在原始数组中保留元素的索引 df = pd.DataFrame({'metric': {24: 53, 68: 93, 86: 38}, 'label': {24: 1, 68: 1, 86: 1}, 'group_1': {24: 1, 68: 1, 86: 1}, 'group_2': {24: 1, 68: 1, 86: 1}, 'metric_group_0': {24: np.array([72, 41, 96]),

我想在pandas中使用类似pos_explode的东西,即在原始数组中保留元素的索引

df = pd.DataFrame({'metric': {24: 53, 68: 93, 86: 38},
 'label': {24: 1, 68: 1, 86: 1},
 'group_1': {24: 1, 68: 1, 86: 1},
 'group_2': {24: 1, 68: 1, 86: 1},
 'metric_group_0': {24: np.array([72, 41, 96]),
  68: np.array([85, 56, 33]),
  86: np.array([26, 85, 26])}})
df = df.reset_index(drop=True)
df = df.reset_index(drop=False)
df = df.set_index(['index'])
display(df)
s=pd.DataFrame({'metric_group_0':np.concatenate(df.metric_group_0.values)},index=df.index.repeat(df.metric_group_0.str.len()))
display(s)
s.join(df.drop('metric_group_0',1),how='left')
这会爆炸数据,但会丢失索引。如何将索引保留为附加列? 也就是说,在本例中,每个
pandas.Index
的值为[1,2,3]

       metric  label  group_1  group_2 metric_group_0
index                                                
0          53      1        1        1   [72, 41, 96]
1          93      1        1        1   [85, 56, 33]
2          38      1        1        1   [26, 85, 26]
当前转换为:

       metric_group_0  metric  label  group_1  group_2
index                                                 
0                  72      53      1        1        1
0                  41      53      1        1        1
0                  96      53      1        1        1
1                  85      93      1        1        1
1                  56      93      1        1        1
1                  33      93      1        1        1
2                  26      38      1        1        1
2                  85      38      1        1        1
2                  26      38      1        1        1
但缺少原始索引。 所需的输出如下所示:

       metric_group_0  metric  label  group_1  group_2 pos_in_array
index                                                 
0                  72      53      1        1        1  1
0                  41      53      1        1        1  2
0                  96      53      1        1        1  3
1                  85      93      1        1        1  1
1                  56      93      1        1        1  2
1                  33      93      1        1        1  3
2                  26      38      1        1        1  1
2                  85      38      1        1        1  2
2                  26      38      1        1        1  3

您可以使用创建此列,我们使用
索引作为组:

df['pos_in_array'] = df.groupby(df.index).cumcount()+1

因此,您的整个代码如下所示,因为您尚未将新创建的数据帧分配到变量中:

df = df.reset_index(drop=True)
df = df.reset_index(drop=False)
df = df.set_index(['index'])

s=pd.DataFrame({'metric_group_0':np.concatenate(df.metric_group_0.values)},
               index=df.index.repeat(df.metric_group_0.str.len()))

df = s.join(df.drop('metric_group_0',1),how='left')

df['pos_in_array'] = df.groupby(df.index).cumcount()+1

您可以使用创建此列,我们使用
索引作为组:

df['pos_in_array'] = df.groupby(df.index).cumcount()+1

因此,您的整个代码如下所示,因为您尚未将新创建的数据帧分配到变量中:

df = df.reset_index(drop=True)
df = df.reset_index(drop=False)
df = df.set_index(['index'])

s=pd.DataFrame({'metric_group_0':np.concatenate(df.metric_group_0.values)},
               index=df.index.repeat(df.metric_group_0.str.len()))

df = s.join(df.drop('metric_group_0',1),how='left')

df['pos_in_array'] = df.groupby(df.index).cumcount()+1