Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.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 dataframe取消堆叠数据并创建新列_Python_Pandas_Dataframe_Group By - Fatal编程技术网

Python Pandas dataframe取消堆叠数据并创建新列

Python Pandas dataframe取消堆叠数据并创建新列,python,pandas,dataframe,group-by,Python,Pandas,Dataframe,Group By,我有两组堆叠数据,如下所示: set n value_1 value_2 0 1 1024 25942.6 25807.8 ----> first set starts here 1 1 2048 72000.5 71507.9 2 1 4096 161095.0 160303.0 3 1 8192 35641

我有两组堆叠数据,如下所示:

    set          n       value_1    value_2
0    1         1024     25942.6     25807.8 ----> first set starts here
1    1         2048     72000.5     71507.9
2    1         4096    161095.0    160303.0
3    1         8192    356419.0    354928.0
4    1        16384    793562.0    788666.0
5    1        32768   1914250.0   1889850.0
6    1        65536   3490860.0   3479040.0
7    1       131072   8096130.0   8036290.0
8    1       262144  16616500.0  16525400.0
11   2         1024     35116.3     35032.5 ----> second set starts here
12   2         2048     98783.8     98507.0
13   2         4096    230813.0    230206.0
14   2         8192    521754.0    518052.0
15   2        16384   1046870.0   1040990.0
16   2        32768   2118340.0   2112680.0
17   2        65536   4693000.0   4673130.0
18   2       131072   9960240.0   9892870.0
19   2       262144  21230600.0  21068700.0
我如何才能取消堆叠它们,以便获得两个新列
value\u 1\u 2
,和
value\u 2\u 2
,它们对应于第二组数据,并基于
n
的值与第一组数据匹配

这就是我想要的:

n         value_1       value_2     value_1_2   value_2_2
1024      25942.6       25807.8     35116.3   35032.5
2048      72000.5       71507.9     98783.8   98507
4096      161095        160303      230813    230206
8192      356419        354928      521754    518052
16384     793562        788666      1046870   1040990
32768     1914250       1889850     2118340   2112680
65536     3490860       3479040     4693000   4673130
131072    8096130       8036290     9960240   9892870
262144    16616500      16525400    21230600  21068700

有一种大锤式的方法。首先

foo = df.groupby('n')
这是成对的列表
(n,组)
。对于每一组,你都需要

newgroup = pd.concat([group.iloc[0], group.iloc[1]], axis=1)
(您可以更改concat中的列名)


最后,
pd.concat
垂直添加新组。

首先,我们创建一个
dfs
列表,方法是使用对列
Set
上的数据帧进行分组,然后针对数据帧中的每个组,我们使用组标识符向每个列添加组标识符:

最后,通过对列
n
上的连续数据帧应用操作,我们使用将数据帧列表
dfs
缩减为单个未堆叠的数据帧

from functools import reduce

dfs = [
    g.drop('set', 1).add_suffix(f'_{k}').rename({f'n_{k}': 'n'}, axis=1)
    for k, g in df.groupby('set')
]

df1 = reduce(lambda x, y: pd.merge(x, y, on='n'), dfs)
结果:

# print(df1)

        n   value_1_1   value_2_1   value_1_2   value_2_2
0    1024     25942.6     25807.8     35116.3     35032.5
1    2048     72000.5     71507.9     98783.8     98507.0
2    4096    161095.0    160303.0    230813.0    230206.0
3    8192    356419.0    354928.0    521754.0    518052.0
4   16384    793562.0    788666.0   1046870.0   1040990.0
5   32768   1914250.0   1889850.0   2118340.0   2112680.0
6   65536   3490860.0   3479040.0   4693000.0   4673130.0
7  131072   8096130.0   8036290.0   9960240.0   9892870.0
8  262144  16616500.0  16525400.0  21230600.0  21068700.0

您想要
n\u copy
列的任何具体原因,因为它似乎与
n
完全相同?不,我可以去掉它。我不明白您所说的成对(n,组)和foo的列表是什么意思。你介意把所有的结果都展示给我吗,就像Shubham Sharma的答案一样