我有:
df = pd.DataFrame([[1, 2,3], [2, 4,6],[3, 6,9]], columns=['A', 'B','C'])

我需要计算每行和每列的i+1i值之间的差,然后将其再次存储在同一列中。所需的输出将是:

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/

10-09 06:22
查看更多