例如,我有一個資料框,其中兩列是“零”和“一”,分別只包含零和一。如果我將它們組合成一列,我首先會得到所有的零,然后是所有的。
我想以一種從兩列中獲取每個元素的方式組合它們,而不是第一列中的所有元素和第二列中的所有元素。所以我不希望結果是 [0, 0, 0, 1, 1, 1],我需要它是 [0, 1, 0, 1, 0, 1]。
我處理了 100K 行資料。實作這一目標的最快或最佳方法是什么?提前致謝!
uj5u.com熱心網友回復:
嘗試:
import pandas as pd
df = pd.DataFrame({ "zeroes" : [0, 0, 0], "ones": [1, 1, 1], "some_other" : list("abc")})
res = df[["zeroes", "ones"]].to_numpy().ravel(order="C")
print(res)
輸出
[0 1 0 1 0 1]
微基準
import pandas as pd
from itertools import chain
df = pd.DataFrame({ "zeroes" : [0] * 10_000, "ones": [1] * 10_000})
%timeit df[["zeroes", "ones"]].to_numpy().ravel(order="C").tolist()
672 μs ± 8.3 μs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%timeit [v for vs in zip(df["zeroes"], df["ones"]) for v in vs]
2.57 ms ± 54 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit list(chain.from_iterable(zip(df["zeroes"], df["ones"])))
2.11 ms ± 73 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)
uj5u.com熱心網友回復:
您可以使用numpy.flatten()如下作為替代:
import numpy as np
import pandas as pd
df[["zeroes", "ones"]].to_numpy().flatten()
基準(在colab上運行):
df = pd.DataFrame({ "zeroes" : [0] * 10_000_000, "ones": [1] * 10_000_000})
%timeit df[["zeroes", "ones"]].to_numpy().flatten().tolist()
1 loop, best of 5: 320 ms per loop
%timeit df[["zeroes", "ones"]].to_numpy().ravel(order="C").tolist()
1 loop, best of 5: 322 ms per loop
uj5u.com熱心網友回復:
我不知道這是否是最佳解決方案,但它應該可以解決您的問題。
df = pd.DataFrame([[0 for x in range(10)], [1 for x in range(10)]]).T
l = [[x, y] for x, y in zip(df[0], df[1])]
l = [x for y in l for x in y]
l
uj5u.com熱心網友回復:
這可能對您有所幫助:使用 Pandas 替換不同列的元素
pd.concat(
[df1, df2], axis=1
).stack().reset_index(1, drop=True).to_frame('C').rename(index='CC{}'.format)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/348731.html
上一篇:從串列np.select分配條件并創建一個新列(熊貓)
下一篇:二維陣列的Numpy梯度
