如何跟踪熊猫数据框中已更改的列

问题描述 投票:0回答:1

我正在执行大量数据清理,并希望跟踪已操纵的行。有没有一种优雅的方式来跟踪我所做的更改(最好是在数据框的一列之内)?

我的初始数据框的示例为:

import numpy as np
import pandas as pd

ind = pd.Index([pd.Timestamp('2019-03-17'), 
                pd.Timestamp('2019-03-18'), 
                pd.Timestamp('2019-03-20'),
                pd.Timestamp('2019-03-21'),
                pd.Timestamp('2019-03-22'),
                pd.Timestamp('2019-03-24')])

data = {'col':[25,25,24,3,25,24]}

df = pd.DataFrame(data, ind)
            col
2019-03-17   25
2019-03-18   25
2019-03-20   24
2019-03-21    3
2019-03-22   25
2019-03-24   24

我正在执行几次清理操作(我将其称为“ a”和“ b”),我想在新列中标记已完成这些操作的行。

# operation a: create full date range and forward fill the missing days

df = df.asfreq(freq='D', fill_value=np.nan)
df['col'].fillna(method='ffill', inplace=True)

# operation b: check for rate changes larger than a particular value and forward fill those rows

df.loc[df['col'].diff()<-3, 'col'] = np.nan
df['col'].fillna(method='ffill', inplace=True)

我想添加一列,以跟踪执行了哪些行,以便输出看起来像这样:

             col changed
2019-03-17  25.0       0
2019-03-18  25.0       0
2019-03-19  25.0       a
2019-03-20  24.0       0
2019-03-21  24.0       b
2019-03-22  25.0       0
2019-03-23  25.0       a
2019-03-24  24.0       0

我想过的最好的方法是在每个步骤中创建“阴影” dfs,并比较之前(“阴影”)和之后(新df)的值,然后修改“ changed”列是差异,但这感觉很笨重。有没有更简洁的方法?

谢谢!

python pandas dataframe missing-data data-cleaning
1个回答
0
投票

假设DataFrame包含一个名为changed的列,并用np.nan以外的值填充,则可以执行以下操作:

# operation a
df = df.asfreq(freq='D', fill_value=np.nan)
df['col'].fillna(method='ffill', inplace=True)
df['changed'].fillna('a', inplace=True)

# operation b
df.loc[df['col'].diff()<-3, ['col', 'changed']] = [np.nan, 'b']
df['col'].fillna(method='ffill', inplace=True)
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.