我正在尝试修改熊猫中的多个列值。每列中具有不同增量的数据帧,以便在折线图上绘制图形时,每列中的值不会相互重叠。
这是我想做的最终目标:链接
假设我有这种数据帧:
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