我有:df = pd.DataFrame([[1, 2,3], [2, 4,6],[3, 6,9]], columns=['A', 'B','C'])
我需要计算每行和每列的i+1
和i
值之间的差,然后将其再次存储在同一列中。所需的输出将是:
Out[2]:
A B C
0 1 2 3
1 1 2 3
2 1 2 3
我已经尝试过这样做,但是最终我得到了一个附加了所有值的列表,我需要将它们分别存储(在列表中或在同一数据帧中)。
有办法吗?
difs=[]
for column in df:
for i in range(len(df)-1):
a = df[column]
b = a[i+1]-a[i]
difs.append(b)
for x in difs:
for column in df:
df[column]=x
最佳答案
您可以使用pandas函数shift
实现您的预期目标。这是它的作用(有关docs的更多信息):
按期望的周期数移动索引,并带有可选的时间频率。
for col in df:
df[col] = df[col] - df[col].shift(1).fillna(0)
df
Out[1]:
A B C
0 1.0 2.0 3.0
1 1.0 2.0 3.0
2 1.0 2.0 3.0
添加
如果您想使用循环,可能更好的方法是使用
iterrows
(有关here的更多信息),因为它提供了(index, Series)
对。difs = []
for i, row in df.iterrows():
if i == 0:
x = row.values.tolist() ## so we preserve the first row
else:
x = (row.values - df.loc[i-1, df.columns]).values.tolist()
difs.append(x)
difs
Out[1]:
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
## Create new / replace old dataframe
cols = [col for col in df.columns]
new_df = pd.DataFrame(difs, columns=cols)
new_df
Out[2]:
A B C
0 1.0 2.0 3.0
1 1.0 2.0 3.0
2 1.0 2.0 3.0
关于python - 遍历数据框(行和行)并替换数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57418413/