考慮以下兩個系列:
sri = inp.groupby(inp.index.date)['value'].count()
2009-01-12 7
2009-01-14 3
和
sro = out.groupby(out.index.date)['value'].count()
2009-01-03 1
2009-01-09 14
2009-01-10 61
2009-01-11 93
2009-01-12 106
2009-01-13 123
2009-01-14 130
當我們從另一個中減去一個時sro-sri,我們有:
2009-01-03 NaN
2009-01-09 NaN
2009-01-10 NaN
2009-01-11 NaN
2009-01-12 99.0
2009-01-13 NaN
2009-01-14 127.0
但是我想要的輸出是:
2009-01-03 1.0
2009-01-04 0.0
2009-01-05 0.0
2009-01-06 0.0
2009-01-07 0.0
2009-01-08 0.0
2009-01-09 14.0
2009-01-10 61.0
2009-01-11 93.0
2009-01-12 99.0
2009-01-13 123.0
2009-01-14 127.0
我們可以使用以下解決方法來生成相同的結果:
start_date = '2009-01-03'
end_date = '2009-01-15'
df = pd.DataFrame(
index=pd.date_range(pd.to_datetime(start_date), pd.to_datetime(end_date) - timedelta(days=1), freq='d').date)
df = df.merge(sro.to_frame(), how='outer', left_index=True, right_index=True) \
.merge(sri.to_frame(), how='outer', left_index=True, right_index=True).fillna(0)
print(df['value_x'] - df['value_y'])
是否有更緊湊的解決方案來生成相同的輸出?
uj5u.com熱心網友回復:
簡單減法的一種簡單方法是使用subwith fillna=0:
sro.sub(sri, fill_value=0).convert_dtypes()
輸出:
2009-01-03 1
2009-01-09 14
2009-01-10 61
2009-01-11 93
2009-01-12 99
2009-01-13 123
2009-01-14 127
添加缺失的索引:
idx = sro.index.union(sri.index)
(sro.sub(sri, fill_value=0)
.reindex(pd.date_range(idx.min(), idx.max()).astype(str), fill_value=0)
.convert_dtypes()
)
輸出:
2009-01-03 1
2009-01-04 0
2009-01-05 0
2009-01-06 0
2009-01-07 0
2009-01-08 0
2009-01-09 14
2009-01-10 61
2009-01-11 93
2009-01-12 99
2009-01-13 123
2009-01-14 127
使用的輸入:
sri = pd.Series({'2009-01-12': 7, '2009-01-14': 3})
sro = pd.Series({'2009-01-03': 1, '2009-01-09': 14, '2009-01-10': 61, '2009-01-11': 93, '2009-01-12': 106, '2009-01-13': 123, '2009-01-14': 130})
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/363570.html
下一篇:按每分鐘的最佳值搜索
