我有一堆遵循這種模式的資料框:
col1 col2 col3
1 2 3
1 2 3
1 2 3
col1 col2 col3
1 2 3
1 2 3
1 2 3
我如何將它們合并到
col1 col2 col3
[1,1] [2,2] [3,3]
[1,1] [2,2] [3,3]
[1,1] [2,2] [3,3]
我不知道該怎么做,只是覺得應該有一個簡單的方法。
uj5u.com熱心網友回復:
如果您的資料框對齊良好,您可以使用numpy.dstack
import numpy as np
out = pd.DataFrame(np.dstack([df1, df2]).tolist(),
index=df1.index, columns=df1.columns)
print(out)
# Output
col1 col2 col3
0 [1, 1] [2, 2] [3, 3]
1 [1, 1] [2, 2] [3, 3]
2 [1, 1] [2, 2] [3, 3]
更新
僅使用pandas:
out = pd.concat([df1, df2]).stack().groupby(level=[0, 1]) \
.apply(list).unstack(level=1)
print(out)
# Output
col1 col2 col3
0 [1, 1] [2, 2] [3, 3]
1 [1, 1] [2, 2] [3, 3]
2 [1, 1] [2, 2] [3, 3]
uj5u.com熱心網友回復:
嘗試這個
import pandas as pd
df1 = pd.DataFrame([[10, 20, 30], [10, 20, 30], [10, 20, 30]])
df2 = pd.DataFrame([[11, 12, 13], [11, 12, 13], [11, 12, 13]])
df1.applymap(lambda x: [x]) df2.applymap(lambda x: [x])
→
0 1 2
0 [10, 11] [20, 12] [30, 13]
1 [10, 11] [20, 12] [30, 13]
2 [10, 11] [20, 12] [30, 13]
解釋:
lambda x: [x]是一個函式,它轉換x長度為 1 的串列中的每個引數,該串列正好包含該引數。
.applymap將此函式應用于資料框中的每個單元格。
(求和運算子)對于 pandas 資料幀是“超載”的。特別是,兩個幀(相同形狀)的總和被定義為一個新幀,在每個單元格中包含運算元(和)f1 f2的相應單元格的總和。f1f2
如果單元格包含數字,這很簡單。但這也適用于其他資料型別:在 Python 中,串列可以通過 sum 運算子連接:[1, 2] [50, 60]→ [1, 2, 50, 60]。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/433542.html
下一篇:對pddf進行子集化的最有效方法
