使用迭代修改多列数据,但更改每列的增量值

  • 本文关键字:迭代 修改 数据 python-3.x pandas
  • 更新时间 :
  • 英文 :


我正在尝试修改熊猫中的多个列值。每列中具有不同增量的数据帧,以便在折线图上绘制图形时,每列中的值不会相互重叠。

这是我想做的最终目标:链接

假设我有这种数据帧:

Col1 Col2 Col3
0    0.3  0.2
1    1.1  1.2
2    2.2  2.4
3    3    3.1

但有数百列和数千个值。

在 excel 或 matplotlib 上的折线图上绘制时,这些值彼此重叠,因此我想通过为每列添加相同的值来分隔每一列,如下所示:

Col1(+0) Col2(+10)  Col3(+20)
0        10.3       20.2
1        11.1       21.2
2        12.2       22.4
3        13         23.1

通过将相同的值添加到一列并在每列上增加 10,我能够看到每行而不会在一个图表中重叠。

我想过使用循环和迭代来自动化这个增值过程,但我在 Stackoverflow 上找不到任何以前的解决方案来解决我如何更改增量值(例如,从一个循环中在 Col1 中添加 0,然后在下一个循环中将 10 添加到 Col2)在不同列之间,但不在一个列中的值内。更糟糕的是,我是一个初学者,对编程或数据操作一无所知。

由于数据是CSV格式,我首先使用Pandas读取它并存储在数据帧中,并选择了我要编辑的列:

import pandas as pd
#import CSV file
df = pd.read_csv ('data.csv')
#store csv data into dataframe
df1 = pd.DataFrame (data = df)
# Locate columns that I want to edit with df.loc
columns = df1.loc[:, ' C000':]

这是我卡住的地方:

# use iteration with increments to add numbers
n = 0
for values in columns:
values = n + 0
print (values)

但是这个 for 循环只添加一个增量值(在本例中为 0),并将其添加到所有列,而不仅仅是第一列。不仅如此,我不知道如何为下一列添加下一个增量值。

任何可能的解决方案将不胜感激。

IIUC ,只需在axis=1上使用df.add()和由df.columns长度组成的列表:

df1 = df.add(list(range(0,len(df.columns)*10))[::10],axis=1)

或者正如@jezrael建议的那样,更好:

df1=df.add(range(0,len(df.columns)*10, 10),axis=1)
print(df1)

Col1  Col2  Col3
0     0  10.3  20.2
1     1  11.1  21.2
2     2  12.2  22.4
3     3  13.0  23.1

详情

list(range(0,len(df.columns)*10))[::10]
#[0, 10, 20]

我建议您避免循环数据框,因为它效率低下,而是考虑添加到矩阵中。

例如

import numpy as np 
import pandas as pd 

# Create your example df 
df = pd.DataFrame(data=np.random.randn(10,3))
# Create a Matrix of ones
x = np.ones(df.shape)
# Multiply each column with an incremented value * 10
x =  x * 10*np.arange(1,df.shape[1]+1)
# Add the matrix to the data
df + x 

编辑:如果您不想以 10、20、30 但 0,10,20 递增,请使用它

import numpy as np 
import pandas as pd 

# Create your example df 
df = pd.DataFrame(data=np.random.randn(10,3))
# Create a Matrix of ones
x = np.ones(df.shape)
# THIS LINE CHANGED 
# Obmit the 1 so there is only an end value -> default start is 0 
# Adjust the length of the vector 
x =  x * 10*np.arange(df.shape[1])
# Add the matrix to the data
df + x 

最新更新