我正在尝试修改pandas中的多个列值。每一列中的数据帧具有不同的增量,以便在折线图上绘制时每一列的值不会相互重叠。
这是我想做的最终目标:link
假设我有这种数据框:
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读取数据并将其存储在Dataframe中,然后选择要编辑的列:
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),并将其添加到所有列,而不仅是第一列。不仅如此,我也不知道如何为下一列添加下一个增量值。
任何可能的解决方案将不胜感激。
答案 0 :(得分:1)
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]
答案 1 :(得分:0)
我建议您避免循环遍历数据帧,因为它效率低下,而是考虑添加到矩阵中。
例如
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