Dataframe:将具有相同列名的单独子列组合在一起
Dataframe : Group separate subcolumns with identical column names together
我已经设法制定了一个数据框,其中包含约 200 列,每列都有一个子列。现在经过一些计算,一组单独的值已存储在具有相同列名的同一数据框中。因此,它们以不同的子列名称存储。
我的问题是如何将这两组(列,子列)对组合在一起。
以下是类似表示的较小子集(我有):
Date Column1 Column2 Column3 Column1 Column2 Column3
Num Num Num ProdID ProdID ProdID
0 2015-01-02 100 106 111 AA AA AD
1 2015-01-02 105 118 109 AB AA AB
2 2015-01-02 102 173 188 AC AC AC
3 2015-01-02 112 101 105 AD AB AE
4 2015-01-02 139 191 156 AE AE AC
5 2015-01-02 126 172 117 AF AE AF
以下是我想要的:
Date Column1 Column2 Column3
Num ProdID Num ProdID Num ProdID
0 2015-01-02 100 AA 106 AA 111 AD
1 2015-01-02 105 AB 118 AA 109 AB
2 2015-01-02 102 AC 173 AC 188 AC
3 2015-01-02 112 AD 101 AB 105 AE
4 2015-01-02 139 AE 191 AE 156 AC
5 2015-01-02 126 AF 172 AE 117 AF
我试过像
这样的基本groupby语句
df = df.groupby(df.columns, axis=1)
但这不起作用。我认为这很简单,但无法弄清楚
我们可以试试 reindex
:
df = df.reindex(columns=[df.columns[0], *sorted(df.columns[1:])])
df.columns[0]
是 Date
,应该 不 排序。然后其余的列得到 sorted
df.columns[1:]
.
示例数据
import numpy as np
import pandas as pd
rows = 3
df = pd.DataFrame(
np.arange(1, (rows * 5) + 1).reshape(-1, 5),
columns=pd.MultiIndex.from_arrays([
['Date', 'Column1', 'Column2', 'Column1', 'Column2'],
['', 'Num', 'Num', 'ProdID', 'ProdID']
])
)
df.iloc[:, 0] = pd.date_range(start='2021-01-01', periods=len(df), freq='D')
之前:
Date Column1 Column2 Column1 Column2
Num Num ProdID ProdID
0 2021-01-01 2 3 4 5
1 2021-01-02 7 8 9 10
2 2021-01-03 12 13 14 15
reindex
之后:
Date Column1 Column2
Num ProdID Num ProdID
0 2021-01-01 2 4 3 5
1 2021-01-02 7 9 8 10
2 2021-01-03 12 14 13 15
我已经设法制定了一个数据框,其中包含约 200 列,每列都有一个子列。现在经过一些计算,一组单独的值已存储在具有相同列名的同一数据框中。因此,它们以不同的子列名称存储。 我的问题是如何将这两组(列,子列)对组合在一起。
以下是类似表示的较小子集(我有):
Date Column1 Column2 Column3 Column1 Column2 Column3
Num Num Num ProdID ProdID ProdID
0 2015-01-02 100 106 111 AA AA AD
1 2015-01-02 105 118 109 AB AA AB
2 2015-01-02 102 173 188 AC AC AC
3 2015-01-02 112 101 105 AD AB AE
4 2015-01-02 139 191 156 AE AE AC
5 2015-01-02 126 172 117 AF AE AF
以下是我想要的:
Date Column1 Column2 Column3
Num ProdID Num ProdID Num ProdID
0 2015-01-02 100 AA 106 AA 111 AD
1 2015-01-02 105 AB 118 AA 109 AB
2 2015-01-02 102 AC 173 AC 188 AC
3 2015-01-02 112 AD 101 AB 105 AE
4 2015-01-02 139 AE 191 AE 156 AC
5 2015-01-02 126 AF 172 AE 117 AF
我试过像
这样的基本groupby语句df = df.groupby(df.columns, axis=1)
但这不起作用。我认为这很简单,但无法弄清楚
我们可以试试 reindex
:
df = df.reindex(columns=[df.columns[0], *sorted(df.columns[1:])])
df.columns[0]
是 Date
,应该 不 排序。然后其余的列得到 sorted
df.columns[1:]
.
示例数据
import numpy as np
import pandas as pd
rows = 3
df = pd.DataFrame(
np.arange(1, (rows * 5) + 1).reshape(-1, 5),
columns=pd.MultiIndex.from_arrays([
['Date', 'Column1', 'Column2', 'Column1', 'Column2'],
['', 'Num', 'Num', 'ProdID', 'ProdID']
])
)
df.iloc[:, 0] = pd.date_range(start='2021-01-01', periods=len(df), freq='D')
之前:
Date Column1 Column2 Column1 Column2
Num Num ProdID ProdID
0 2021-01-01 2 3 4 5
1 2021-01-02 7 8 9 10
2 2021-01-03 12 13 14 15
reindex
之后:
Date Column1 Column2
Num ProdID Num ProdID
0 2021-01-01 2 4 3 5
1 2021-01-02 7 9 8 10
2 2021-01-03 12 14 13 15