使用Pandas dataframe添加MultiIindex系列的滞后特性

2024-09-28 03:24:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个多索引系列(3个索引),它看起来如下:

Week   ID_1    ID_2
3       26     1182            39.0
               4767            42.0
               31393           20.0
               31690           42.0
               32962            3.0
....................................

我还有一个数据帧^{cd1>},它包含了上面系列中用于索引的所有列(以及更多),我想在我的数据帧^{{cd1>}中创建一个新列,其中包含与系列中的^{{cd3>}和^{cd4>}和^{{cd5>}匹配的值。

例如,对于数据帧中具有^{{cd6>}、^{cd7>}和^{{cd8>}的行,我希望匹配由^{{cd6>}、^{cd7>}和^{cd11>}(3-2)索引的序列中的值,并将其放在新列中的行上。此外,我的系列可能不一定具有数据帧所需的值,在这种情况下,我只想拥有0。

现在,我正试图通过以下方式来完成此操作:

^{pr2}$

然而,这是非常缓慢和记忆饥饿,我想知道有什么更好的方法来做到这一点。

FWIW,该系列是使用

^{pr3}$

如果有更好的途径来创造我所寻找的东西,我愿意用不同的方式来做。


Tags: 数据id方式情况序列行上weekcd1
1条回答
网友
1楼 · 发布于 2024-09-28 03:24:21

Week增加2:

saved_groupby = df.groupby(['Week', 'ID_1', 'ID_2'])['Target'].median()
saved_groupby = saved_groupby.reset_index()
saved_groupby['Week'] = saved_groupby['Week'] + 2

然后将df与{}合并:

^{pr2}$

这将使df与2周前的目标中值相匹配。 当不匹配时,要使中值(目标)saved_groupby列为0,请使用fillna将NaNs更改为0:

result['Median'] = result['Median'].fillna(0)

例如

import numpy as np
import pandas as pd
np.random.seed(2016)

df = pd.DataFrame(np.random.randint(5, size=(20,5)), 
                  columns=['Week', 'ID_1', 'ID_2', 'Target', 'Foo'])

saved_groupby = df.groupby(['Week', 'ID_1', 'ID_2'])['Target'].median()
saved_groupby = saved_groupby.reset_index()
saved_groupby['Week'] = saved_groupby['Week'] + 2
saved_groupby = saved_groupby.rename(columns={'Target':'Median'})

result = pd.merge(df, saved_groupby, on=['Week', 'ID_1', 'ID_2'], how='left')
result['Median'] = result['Median'].fillna(0)
print(result)

收益率

    Week  ID_1  ID_2  Target  Foo  Median
0      3     2     3       4    2     0.0
1      3     3     0       3    4     0.0
2      4     3     0       1    2     0.0
3      3     4     1       1    1     0.0
4      2     4     2       0    3     2.0
5      1     0     1       4    4     0.0
6      2     3     4       0    0     0.0
7      4     0     0       2    3     0.0
8      3     4     3       2    2     0.0
9      2     2     4       0    1     0.0
10     2     0     4       4    2     0.0
11     1     1     3       0    0     0.0
12     0     1     0       2    0     0.0
13     4     0     4       0    3     4.0
14     1     2     1       3    1     0.0
15     3     0     1       3    4     2.0
16     0     4     2       2    4     0.0
17     1     1     4       4    2     0.0
18     4     1     0       3    0     0.0
19     1     0     1       0    0     0.0

相关问题 更多 >

    热门问题