Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将两列数据混合到一个数据帧中,第一列的第一个元素、第二列的第二个元素等等?_Python_Python 3.x_Pandas_Dataframe - Fatal编程技术网

Python 如何将两列数据混合到一个数据帧中,第一列的第一个元素、第二列的第二个元素等等?

Python 如何将两列数据混合到一个数据帧中,第一列的第一个元素、第二列的第二个元素等等?,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,假设我有熊猫数据帧: 第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", &q

假设我有熊猫数据帧:

第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

注意too的用法

根据@Michael Szczesny的建议,您可以:

new_series = df.stack().reset_index(drop=True)
它将返回一个
pandas.Series

添加的基准测试:

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)
根据@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\u numpy()
返回一个副本。 有关
numpy.ravel
的详细信息,请参阅:

简言之,如果数组在内存中是Fortran连续的,“A”将强制以类似Fortran的索引顺序读取元素,使用“K”将按照元素在内存中出现的顺序读取元素。

与以下一起使用:

注意:这将非常有效。

时间比较:

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)

起始数据框中是否有空行?没有,全部已填充。
df.stack().reset\u index(drop=True)
您是否尝试过df.values.flatte()然后对其进行整形?它返回一个numpy数组,但如果需要,可以将其转换回数据帧。相关答案:完美@MichaelSzczesny,是的working@Augustas请核对我的答案。它有最好的性能。我没想到速度性能对这个任务很重要,好主意,谢谢,我会编辑我的答案。