大熊猫;通过划分大型数据帧的最后一列来创建新列

时间:2017-05-17 11:46:44

标签: python pandas dataframe

我有一个非常大的数据帧,包含400列和> 1000行。数据框的列是固定的,不会更改。我想要的是用最后120列做一些事情;将这些列中的值除以数据框中另一列的值

我的数据框是这样的:

Column1 Column2 Column3 .... Column280...Column400
A       2       6            20          40   
B       4       3            20          20
C       3       3            30          9

我想用Column2将Column280分成Column400,并将每个分区的结果添加到一个新列中,如下所示:

Column1 Column2 Column3 .... Column280...Column400 .. Column401....Column520
A       2       6            20          40           10           20
B       4       3            20          20           5            5
C       3       3            30          9            10           3


Column401 = Column280/Column2 

Column402 = Column281/Column2 

Column403 = Column282/Column2

我有一个包含最后120列的列名的列表,但我真的不知道如何告诉pandas将这些列分开并将结果添加到新列中。希望有人能在这里帮助我!

2 个答案:

答案 0 :(得分:2)

<强>设定:

df = pd.DataFrame(np.random.randint(0,20,(5,400)), columns=range(1, 401)) \
       .add_prefix('Column')

<强>解决方案:

df[['Column{}'.format(i) for i in range(401, 401+(400-280)+1)]] = \
    df.loc[:, 'Column280':'Column400'].div(df['Column2'], axis=0)

<强>结果:

In [42]: df
Out[42]:
   Column1  Column2  Column3  Column4  Column5  Column6  Column7  Column8  Column9  Column10    ...      Column512  \
0        8        7        3        9       11       14       12       18        6         5    ...       2.714286
1        9       12        4        8        8        2       14       16        9        12    ...       0.166667
2       15        8       11        9       15        0        9       15       16         2    ...       0.000000
3       16       17       12       10        0       15       18        9        9        19    ...       1.117647
4        0       16       17        6        8       17        3        4       17         0    ...       0.812500

   Column513  Column514  Column515  Column516  Column517  Column518  Column519  Column520  Column521
0   0.428571   1.857143   1.714286   0.000000   2.142857   2.428571   1.000000   2.285714   0.571429
1   1.416667   0.750000   0.083333   0.916667   0.166667   1.250000   1.083333   0.500000   1.166667
2   2.000000   0.500000   0.125000   1.875000   1.500000   2.000000   1.000000   1.875000   1.875000
3   0.352941   0.882353   0.470588   0.882353   0.176471   1.000000   0.058824   0.588235   0.941176
4   0.562500   0.687500   0.750000   1.000000   0.750000   0.875000   0.687500   1.000000   1.000000

[5 rows x 521 columns]

<强>解释

如果我们想在一个步骤中向DataFrame添加几个列,我们就可以这样做:

df[['new1','new2','new3']] = array

其中array必须是(len(df) x 3)形状或三个系列与DF长度相同

df.loc[:, 'Column280':'Column400']选择从'Column280''Column400'开始的所有行和列(注意:列必须按字典顺序排序)

PS here is a very well documented Pandas boolean indexing

.div(df['Column2'], axis=0)将左侧的DataFrame划分为df['Column2']轴上的index

答案 1 :(得分:1)

这就是你的想法,

df[Column401] = df[Column280]/df[Column2]

df[Column402] = df[Column281]/df[Column2]

df[Column403] = df[Column282]/df[Column2]

您可以遍历列以对所有列执行相同的操作