我有一个如下所示的Pandas数据框:

c1 c2 c3 c4
p1 q1 r1 20
p2 q2 r2 10
p3 q3 r1 30


所需的输出看起来像这样。

c1 c2 c3 c4 NewColumn(c1.1)
p1 q1 r1 20  0
p2 q2 r2 10  p2-p1
p3 q3 r1 30  p3-p2


我的数据集的形状是(333650,665)我想对所有列都这样做。有什么方法可以做到这一点?

我正在使用的代码:

data = pd.read_csv('Mydataset.csv')
    i=0
    j=1
    while j < len(data['columnname']):
        j=data['columnname'][i+1] - data['columnname'][i]
        i+=1 #Next value of column.
        j+=1 #Next value new column.
        print(j)

最佳答案

这是你想要的吗?它使用shift方法找到特定列的行之间的差异,并将其分配给新列。
请注意,我正在使用Dave的数据。

df['New Column'] = df.a.sub(df.a.shift()).fillna(0)

    a   b   c   New Column
0   1   1   1   0.0
1   2   1   4   1.0
2   3   2   9   1.0
3   4   3   16  1.0
4   5   5   25  1.0
5   6   8   36  1.0


对于多列,这可能就足够了:

M = df.diff().fillna(0).add_suffix('_1')

#concatenate along the columns axis

pd.concat([df,M], axis = 1)

    a   b   c   a_1 b_1 c_1
0   1   1   1   0.0 0.0 0.0
1   2   1   4   1.0 0.0 3.0
2   3   2   9   1.0 1.0 5.0
3   4   3   16  1.0 1.0 7.0
4   5   5   25  1.0 2.0 9.0
5   6   8   36  1.0 3.0 11.0

关于python - Python Pandas:列值的差异插入到新列中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60354948/

10-09 01:19