假设我有一个如下所示的DataFrame:
X
我想为上一个月(或过去Month, Gender, State, Value, Last Value
2010-01, M, S1, 10, NaN
2010-02, M, S1, 20, 10
2010-05, M, S1, 26, NaN (there is no 2010-04 for M, S1)
2010-03, F, S2, 11, NaN
个月)添加另一列性别和状态,如果存在,即:
groupby(['Gender', 'State'])
我知道我必须shift()
但是{{1}}不起作用,因为它只按行数移动数据,它不知道句点本身(如果缺少一个月)。< / p>
答案 0 :(得分:0)
我找到了一种做到这一点的方法,对此不太满意:
full_index = []
for g in all_genders:
for s in all_states:
for m in all_months:
full_index.append((g, s, m))
df = df.set_index(['Gender', 'State', 'Month'])
df = df.reindex(full_index) # fill in all missing values
基本上,不是处理数据中缺少的行,而是只创建缺少的行,shift()
按预期工作。
即:
df['Last Value'] = df.shift(1).Value
...
df = df.reset_index() # go back to tabular format from this hierarchy