[英]Create a Pandas Dataframe from two lists: column 1 is first list, column 2 is second list which is a nested list
[英]How to mix two pandas columns into one dataframe with first element from first column, second element from second column and so on?
想象一下我有熊貓數據框:
列 1 列2
A D
B E
C F
如何以這種形式獲得結果數據框?
柱子
A
D
B
E
C
F
編輯:請參閱下面的基准以獲取稍快的解決方案。
你可以這樣做:
# Import pandas library
import pandas as pd
# The data
data = [["A", "D"], ["B", "E"], ["C", "F"]]
# Create DataFrame
df = pd.DataFrame(data, columns = ["Column1", "Column2"])
# Flatten and convert to DataFrame
new_df = pd.DataFrame(df.to_numpy().flatten())
print(df)
輸出:
A
D
B
E
C
F
new_df
將是一個pandas.DataFrame
。
請注意df.to_numpy()
的使用。
正如@Michael Szczesny 所建議的,你可以這樣做:
new_series = df.stack().reset_index(drop=True)
這將返回一個pandas.Series
。
添加的基准:
根據@Mayank Porwal 的回答,我添加了此基准測試結果。 我將 timeit.repeat 與repeat = 7, number = 10000
。 從最快到最慢排序:
new_df = pd.DataFrame(df.to_numpy().ravel('A')) # 51.0 µs
new_df = pd.DataFrame(df.to_numpy().ravel('K')) # 51.0 µs
new_df = pd.DataFrame(df.to_numpy().ravel('F')) # 51.1 µs
new_df = pd.DataFrame(df.to_numpy().flatten()) # 52.6 µs
new_df = pd.DataFrame(df.to_numpy().ravel('C')) # 53.4 µs
new_series = df.stack().reset_index(drop=True) # 322.0 µs
使用numpy.ravel
是最快的,主要是因為它返回一個視圖,而numpy..to_numpy()
返回一個副本。 有關numpy.ravel
詳細信息,請參閱: https : numpy.ravel
簡而言之,如果數組在內存中是 Fortran 連續的,則“A”將強制以類似於 Fortran 的索引順序讀取元素,而“K”將按照它們在內存中出現的順序讀取元素。
將df.to_numpy
與numpy.ravel
df.to_numpy
使用:
In [2349]: x = pd.DataFrame(df.to_numpy().ravel('F'))
In [2350]: x
Out[2350]:
0
0 A
1 B
2 C
3 D
4 E
5 F
dtype: object
注意:這將非常高效。
時序比較:
In [2369]: dd = pd.concat([df] * 1000)
# Rivers' answers:
In [2369]: %timeit pd.DataFrame(dd.to_numpy().flatten())
95.6 µs ± 1.55 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
In [2371]: %timeit dd.stack().reset_index(drop=True)
919 µs ± 9.95 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
# My answer:
In [2372]: %timeit pd.DataFrame(dd.to_numpy().ravel('F'))
62 µs ± 577 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.