如何将一个熊猫数据框中的多列合并为一个系列?
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])
我有一个实际上有 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])