2017-10-05 78 views
1

列表对于给定的dataframe获得一个或多个列中的值从熊猫数据框中

Bin1 Bin2 Bin3 
0 A  1  7 
1 B  2  8 
2 C  3  9 

我想从Bin1Bin3

我试过值的列表,

df[["Bin1","Bin3"]].values.tolist() 

但它没有给出预期的列表。

我期望的输出,

output_df = ["A","B","C",7,8,9] 

回答

1

建立列表的列表,然后flatten

l = df[["Bin1","Bin3"]].values.T.tolist() 

flat_list = [item for sublist in l for item in sublist] 
print (flat_list) 
['A', 'B', 'C', 7, 8, 9] 

类似,由于Bharath shetty

flat_list = df[["Bin1","Bin2"]].values.T.flatten().tolist() 
+0

'DF [[ “斌”, “斌2”]]。values.flatten()。tolist()'? – Dark

2

在这里你去:

df['Bin1'].tolist() + df['Bin3'].tolist() 

['A', 'B', 'C', 7, 8, 9] 
0

一样简单:list(df[["Bin1","Bin2"]].as_matrix().flatten())

1

很少有其他方式

选项1unstack

In [1413]: df[['Bin1', 'Bin3']].unstack().values.tolist() 
Out[1413]: ['A', 'B', 'C', 7L, 8L, 9L] 

选项2ravel

In [1426]: df[['Bin1', 'Bin3']].values.ravel(order='A') 
Out[1426]: array(['A', 'B', 'C', 7L, 8L, 9L], dtype=object) 

计时

In [1446]: df.shape 
Out[1446]: (60000, 3) 

In [1447]: %timeit df['Bin1'].values.tolist() + df['Bin3'].values.tolist() 
100 loops, best of 3: 2.95 ms per loop 

In [1440]: %timeit df['Bin1'].tolist() + df['Bin3'].tolist() 
100 loops, best of 3: 4.87 ms per loop 

In [1442]: %timeit df[['Bin1', 'Bin3']].values.ravel(order='A').tolist() 
100 loops, best of 3: 5.86 ms per loop 

In [1443]: %timeit df[['Bin1', 'Bin3']].unstack().values.tolist() 
100 loops, best of 3: 9.32 ms per loop 

In [1444]: %timeit df[["Bin1","Bin2"]].values.T.flatten().tolist() 
100 loops, best of 3: 6.91 ms per loop 

In [1445]: %timeit [it for subl in df[["Bin1","Bin3"]].values.T.tolist() for it in subl] 
10 loops, best of 3: 20.3 ms per loop 
1

通过使用melt

df[['Bin1','Bin3']].melt().value.tolist() 
Out[382]: ['A', 'B', 'C', 7, 8, 9] 
相关问题