如何将一个熊猫数据框中的多列合并为一个系列?

how to union multiple columns from one panda data frame into one series?

我有一个实际上有 20 多列的数据框。下面的例子给出了 4 列。每列的行数相等。如何转换为只有一列的新数据框(如下所示的示例)。我将使用新的组合数据框来计算一些指标。如何为此编写简洁高效的代码?非常感谢!

data={"col1":[1,2,3,5], "col_2":[6,7,8,9], "col_3":[10,11,12,14], "col_4":[7,8,9,10]}
pd.DataFrame.from_dict(data)

试试 melt

out = pd.DataFrame.from_dict(data).melt().drop(['variable'],axis=1)
Out[109]: 
    value
0       1
1       2
2       3
3       5
4       6
5       7
6       8
7       9
8      10
9      11
10     12
11     14
12      7
13      8
14      9
15     10

您可以将 DataFrame 转换为 numpy 数组并使用 ravel 方法将其展平。最后,用结果构造一个 Series(或 DataFrame)。

data = {"col1":[1,2,3,5], "col_2":[6,7,8,9], "col_3":[10,11,12,14], "col_4":[7,8,9,10]}
df = pd.DataFrame(data)

new_col = pd.Series(df.to_numpy().ravel(order='F'), name='new_col')

输出:

>>> new_col

0      1
1      2
2      3
3      5
4      6
5      7
6      8
7      9
8     10
9     11
10    12
11    14
12     7
13     8
14     9
15    10
Name: new_col, dtype: int64

如果您从字典开始,请使用 itertools.chain:

data={"col1":[1,2,3,5], "col_2":[6,7,8,9], "col_3":[10,11,12,14], "col_4":[7,8,9,10]}

from itertools import chain
pd.DataFrame({'col': chain.from_iterable(data.values())})

否则,ravel 底层 numpy 数组:

df = pd.DataFrame.from_dict(data)
pd.Series(df.to_numpy().ravel('F'))

输出:

0      1
1      2
2      3
3      5
4      6
5      7
6      8
7      9
8     10
9     11
10    12
11    14
12     7
13     8
14     9
15    10
dtype: int64

根据要执行的计算,您甚至可能不需要实例化 DataFrame/Series 并坚持使用数组:

a = df.to_numpy().ravel('F')

输出:array([ 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 14, 7, 8, 9, 10])