2017-07-21 181 views
1

我有一个数据帧有4列和4行。我需要将它重新塑造成2列和4行。 2个新列是添加col1 + col3和col2 + col4的值的结果。我不希望为它创建任何其他内存对象。动态重塑熊猫数据框

我想

df['A','B'] = df['A']+df['C'],df['B']+df['D'] 

可不可以只用一滴功能可以实现吗?有没有其他更简单的方法呢?

回答

1

考虑样本数据帧的代码

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 
0

这个工作对我来说:

df['A'], df['B'] = df['A'] + df['C'], df['B'] + df['D'] 
df.drop(['C','D'], axis=1) 
+0

谢谢@jxstanford为您解答。它可以用一行代码完成吗? – Avij

+0

当然,尽管我不相信这对我的例子的表现很重要,并且会伤害IMO的可读性。 FWIW,我已经给了我的向上箭头@ayhan答案,由于它的灵活性和idomatic品质。 – jxstanford

3

同时两列求和的动态方法是使用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 

您可以使用重命名之后,如果你想改变列名,但这将需要一个逻辑。