我有一個數據幀有4列和4行。我需要將它重新塑造成2列和4行。 2個新列是添加col1 + col3和col2 + col4的值的結果。我不希望爲它創建任何其他內存對象。動態重塑熊貓數據框
我想
df['A','B'] = df['A']+df['C'],df['B']+df['D']
可不可以只用一滴功能可以實現嗎?有沒有其他更簡單的方法呢?
我有一個數據幀有4列和4行。我需要將它重新塑造成2列和4行。 2個新列是添加col1 + col3和col2 + col4的值的結果。我不希望爲它創建任何其他內存對象。動態重塑熊貓數據框
我想
df['A','B'] = df['A']+df['C'],df['B']+df['D']
可不可以只用一滴功能可以實現嗎?有沒有其他更簡單的方法呢?
考慮樣本數據幀的代碼
pd.DataFrame(
df.values.reshape(4, 2, 2).transpose(0, 2, 1).sum(2),
columns=df.columns[:2]
)
A B
0 2 4
1 10 12
2 18 20
3 26 28
的代碼
另一條線df
df = pd.DataFrame(np.arange(16).reshape(4, 4), columns=list('ABCD'))
df
A B C D
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
3 12 13 14 15
一號線
df.iloc[:, :2] + df.iloc[:, 2:4].values
A B
0 2 4
1 10 12
2 18 20
3 26 28
另一個
df.assign(A=df.A + df.C, B=df.B + df.D).drop(['C', 'D'], 1)
A B
0 2 4
1 10 12
2 18 20
3 26 28
這個工作對我來說:
df['A'], df['B'] = df['A'] + df['C'], df['B'] + df['D']
df.drop(['C','D'], axis=1)
同時兩列求和的動態方法是使用GROUPBY:
df.groupby(np.arange(len(df.columns)) % 2, axis=1).sum()
Out[11]:
0 1
0 2 4
1 10 12
2 18 20
3 26 28
您可以使用重命名之後,如果你想改變列名,但這將需要一個邏輯。
謝謝@jxstanford爲您解答。它可以用一行代碼完成嗎? – Avij
當然,儘管我不相信這對我的例子的表現很重要,並且會傷害IMO的可讀性。 FWIW,我已經給了我的向上箭頭@ayhan答案,由於它的靈活性和idomatic品質。 – jxstanford