我有一个数据框架
df1 = pd.DataFrame({
'id': [11, 22],
1: [0.001, 0.005],
2: [0.004, 0.006],
}).set_index('id')
和另一个df指定我们需要为每个id
进行左移s_df = pd.DataFrame({
'id': [11, 22],
'shift_val': [0, 1],
}).set_index('id')
我想左移id 1和2对应的shift_val
out = pd.DataFrame({
'id': [11, 22],
1: [0.001, 0.006],
2: [0.004, np.nan],
}).set_index('id')
请建议
感谢shift
不支持多个句号,所以必须循环。
你可以使用:
df1.apply(lambda s: s.shift(-s_df['shift_val'].get(s.name, 0)), axis=1)
或,concat
:
pd.concat([df1.loc[x].shift(-s_df['shift_val'].get(x, 0))
for x in df1.index], axis=1).T
输出:
1 2
uid
11 0.001 0.004
22 0.006 NaN