Подкадр данных: берется предыдущее значение из исходного df, но не в подмножестве - PullRequest
1 голос
/ 21 ноября 2019

У меня есть фрейм данных, подобный следующему:

                        A
2018-10-16 15:11:00     100
2018-10-16 15:11:07     101
2018-10-16 15:11:11     102
2018-10-16 15:11:12     101
2018-10-16 15:11:13     100
2018-10-16 15:11:17     110
2018-10-16 15:11:20     103
2018-10-16 15:11:41     99
2018-10-16 15:11:54     107

И фрейм данных подмножества, подобный следующему:

                        A
2018-10-16 15:11:11     102
2018-10-16 15:11:20     103
2018-10-16 15:11:41     99

Мне нужно преобразовать его в следующее:

                        A       New
2018-10-16 15:11:11     102     101
2018-10-16 15:11:20     103     110
2018-10-16 15:11:41     99      110

То есть: для каждой строки принять предыдущее значение в исходном кадре данных, но не в подмножестве кадра данных

Ответы [ 2 ]

2 голосов
/ 21 ноября 2019

Используйте concat по значениям индекса с внешним соединением по умолчанию и DataFrame.shift отредактированные исходные значения, затем заменяйте совпадающие значения на пропущенные и заполняйте их вперёд, последние удаляйте строки, пропускаязначения по A столбцу:

df = pd.concat([df_subset['A'], df['A'].shift()], axis=1, keys=('A','new'), sort=True)
df['new'] = df['new'].mask(df['new'].isin(df['A'])).ffill()
df = df.dropna(subset=['A'])
print (df)
                         A    new
2018-10-16 15:11:11  102.0  101.0
2018-10-16 15:11:20  103.0  110.0
2018-10-16 15:11:41   99.0  110.0
0 голосов
/ 13 декабря 2019

Я наконец сделал это так:

df:

    A
1   1000
2   1000
3   1001
4   1001
5   10
6   1000
7   1010
8   9
9   100000
10  6
11  999
12  10110
13  10111
14  1000

subnet_df:

    A
5   10
8   9
9   100000
10  6
12  10110
13  10111

.

subnet_indexs = subnet_df.index
aux_df = df.copy()
aux_df['NEW'] = aux_df['A']
aux_df.loc[subnet_indexs, new_column_name] = np.nan
aux_df[new_column_name].fillna(method='ffill', inplace=True)
subnet_df = aux_df.loc[subnet_indexs]

.

    A       NEW
5   10      1001.0
8   9       1010.0
9   100000  1010.0
10  6       1010.0
12  10110   999.0
13  10111   999.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...