[英]Pandas: Multiple columns into one column
我有以下數據(2 列,4 行):
Column 1: A, B, C, D
Column 2: E, F, G, H
我試圖將列合並為一列,如下所示(1 列,8 行):
Column 3: A, B, C, D, E, F, G, H
我正在使用 pandas DataFrame 並嘗試使用不同的函數但沒有成功( append
、 concat
等)。 非常感激任何的幫助!
訣竅是使用stack()
df.stack().reset_index()
level_0 level_1 0
0 0 Column 1 A
1 0 Column 2 E
2 1 Column 1 B
3 1 Column 2 F
4 2 Column 1 C
5 2 Column 2 G
6 3 Column 1 D
7 3 Column 2 H
更新
pandas 為這個stack
提供了一個內置方法,它可以執行您想要的操作,請參閱其他答案。
這是我多年前了解stack
之前的第一個答案:
In [227]:
df = pd.DataFrame({'Column 1':['A', 'B', 'C', 'D'],'Column 2':['E', 'F', 'G', 'H']})
df
Out[227]:
Column 1 Column 2
0 A E
1 B F
2 C G
3 D H
[4 rows x 2 columns]
In [228]:
df['Column 1'].append(df['Column 2']).reset_index(drop=True)
Out[228]:
0 A
1 B
2 C
3 D
4 E
5 F
6 G
7 H
dtype: object
您可以使用ravel
列方向的值展平,速度要快得多。
In [1238]: df
Out[1238]:
Column 1 Column 2
0 A E
1 B F
2 C G
3 D H
In [1239]: pd.Series(df.values.ravel('F'))
Out[1239]:
0 A
1 B
2 C
3 D
4 E
5 F
6 G
7 H
dtype: object
細節
中等的
In [1245]: df.shape
Out[1245]: (4000, 2)
In [1246]: %timeit pd.Series(df.values.ravel('F'))
10000 loops, best of 3: 86.2 µs per loop
In [1247]: %timeit df['Column 1'].append(df['Column 2']).reset_index(drop=True)
1000 loops, best of 3: 816 µs per loop
大的
In [1249]: df.shape
Out[1249]: (40000, 2)
In [1250]: %timeit pd.Series(df.values.ravel('F'))
10000 loops, best of 3: 87.5 µs per loop
In [1251]: %timeit df['Column 1'].append(df['Column 2']).reset_index(drop=True)
100 loops, best of 3: 1.72 ms per loop
您似乎只是在尋求幫助來創建另一個數據視圖。 如果沒有理由這些數據首先位於兩列中,那么只需創建一列。 但是,如果您需要將它們組合起來以在其他工具中進行演示,您可以執行以下操作:
import itertools as it, pandas as pd
df = pd.DataFrame({1:['a','b','c','d'],2:['e','f','g','h']})
sorted(it.chain(*df.values))
# -> ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.