我有一个非常大的数据帧,包含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将这些列分开并将结果添加到新列中。希望有人能在这里帮助我!
答案 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]
您可以遍历列以对所有列执行相同的操作