[英]pandas, how to add columns to a multiindex column DataFrame
這是我的原始 DataFrame(帶有多索引列):
In [72]:df
Out[72]:
a b
x y x y
0 1.545293 -0.459270 0.899254 -1.010453
1 0.458760 0.275400 -0.190951 0.169195
2 -0.941817 1.109823 0.077953 -0.247074
3 1.790101 -1.643470 0.979625 -1.704657
4 -2.044814 -0.243726 -0.039724 0.600066
我還有另一個數據幀:
In [77]:df2
Out[77]:
x y
0 -1.085869 -0.952949
1 0.601585 0.570050
2 0.328601 0.802610
3 -0.415952 -0.090088
4 0.757545 -0.736933
如何將df2
的列添加到df
以獲得這樣的新 DataFrame:
In [83]:df3
Out[83]:
a b c
x y x y x y
0 1.545293 -0.459270 0.899254 -1.010453 -1.085869 -0.952949
1 0.458760 0.275400 -0.190951 0.169195 0.601585 0.570050
2 -0.941817 1.109823 0.077953 -0.247074 0.328601 0.802610
3 1.790101 -1.643470 0.979625 -1.704657 -0.415952 -0.090088
4 -2.044814 -0.243726 -0.039724 0.600066 0.757545 -0.736933
我目前的方法是使用 for 循環:
for col in df2.columns:
df['c', col] = df2[col]
有什么方法可以避免循環嗎?
試試pd.concat
:
pieces = {'a' : df1['a'],
'b' : df1['b'],
'c' : df2}
df3 = pd.concat(pieces, axis=1)
我發現了另一種在一般情況下(運行 Python 3.6)執行此操作的方法,而無需顯式解構DataFrame
。 您可以將pd.concat
與字典參數一起使用,
df3 = pd.concat({**df1, **{('c',nm):val for nm,val in df2.items()})
**
DataFrame
對象的擴展似乎返回一個“名稱”等於列名字符串/值的系列對象字典,或者如果列是MultiIndexed ,則包含列字符串/值的層次結構的元組。 然后,當將pd.concat
作為字典讀回時, Pandas
從元組重新構造 MultiIndexed 列。
請注意,這比您所做的直接分配效率低得多! 由於它必須解構數據幀的每一列和MultiIndex,然后重新組合。
我認為堆疊是這里最好的解決方案:
# First stack df and df2
df, df2 = df.stack(), df2.stack()
# Then add df2 to df as a column
df2['c'] = df2
# Now unstack
df2 = df2.unstack()
首先,將列級別(“c”)添加到df2
。 然后,連接兩個數據幀。
df2.columns = pd.MultiIndex.from_product(["c"], df.columns])
df = pd.concat([df, df2], axis=1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.