遍历数据框(行和行)并替换数据

时间:2019-08-08 18:04:12

标签: python loops dataframe append

我有: 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

1 个答案:

答案 0 :(得分:1)

您可以使用熊猫函数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