使用Pandas

时间:2018-06-01 23:17:57

标签: python pandas resampling pandas-datareader

我设法通过查看先前的答案将我的每日数据转换为每周数据,但我将日期设置为索引。我的目标是保持' Symbol'作为索引并包括'日期'作为专栏。

我试过包括'日期'在字典和Symbol作为索引,但它导致索引需要是Datetime的错误。

这是我的代码:

if ( data_duration == 'w' ):

    df['Date'] = pd.to_datetime(df['Date'])
    df.set_index('Date', inplace=True)
    df.sort_index(inplace=True)



def take_first(array_like):
    return array_like[0]

def take_last(array_like):
    return array_like[-1]

output = df.resample('W',                                 # Weekly resample
                    how={'Open': take_first, 
                         'High': 'max',
                         'Low': 'min',
                         'Close': take_last,
                         'Volume': 'sum'}, 
                    loffset=pd.offsets.timedelta(days=-6))  # to put the labels to Monday

df = output[['Open', 'High', 'Low', 'Close', 'Volume']]

但我希望将我的索引保留为'符号',就像它在每日数据中一样,同时在'输出'中包含日期。

这就是每日数据的样子:

             Date       Close      High       Low      Open    Volume
Symbol                                                            
AAPL        2017-05-25  153.87  154.3500   153.0300      153.7300      19235598
AAPL        2017-05-26  153.61  154.2400  153.3100      154.0000      21927637

然而,在每周格式化之后,除了符号之外,一切都保持不变。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您想要class App extends Component { state = { cart: [], items: [ { id: uuid(), name: 'chocolate', price: 10, remaining: 5 }, { id: uuid(), name: 'strawberry', price: 50, remaining: 10 }, { id: uuid(), name: 'banana', price: 43, remaining: 20 } ], total: 0, addToCartMessage: false, removeFromCartMessage: false, searchTerm: '' } addItem = item => { const { cart, items, total } = this.state cart.push({ id: item.id, name: item.name, price: item.price }) const remaining = item.remaining-- const totalPrice = cart.reduce((a, b) => a + b.price, 0) this.setState({ total: totalPrice, cart, addToCartMessage: true, ...items, remaining }) } removeItem = cartItems => { const { items, cart, total } = this.state const removeItem = cart.filter(item => item.id !== cartItems.id) const itemId = items.find(item => item.name === cartItems.name).remaining++ this.setState({ removeFromCartMessage: true, total: total - cartItems.price, cart: removeItem, ...items, remaining: itemId }) } render() { const { cart, items, total, addToCartMessage, removeFromCartMessage } = this.state if (addToCartMessage || removeFromCartMessage) { setTimeout(() => { this.setState({ addToCartMessage: false, removeFromCartMessage: false }) }, 1000) } const filteredItems = items.filter(item => item.name.includes(this.state.searchTerm)) return ( <div className="App"> {cart.length === 0 ? <h3>No items in cart</h3> : ( <div> <h1>Cart:</h1> {cart.map(items => ( <div key={items.id}> <h1>{items.name} x 3</h1> <p>${items.price}</p> <button onClick={() => this.removeItem(items)}>Remove From Cart</button> </div> ))} </div> )} <hr /> <input type="text" placeholder="Search for an item..." onChange={e => this.setState({ searchTerm: e.target.value })} value={this.state.searchTerm} /> {filteredItems.map(item => ( <div key={item.id}> <h1>{item.name}</h1> <p>Price: ${item.price}</p> {item.remaining === 0 ? <p>Sold Out</p> : ( <div> <p>Remaining: {item.remaining}</p> <button onClick={() => this.addItem(item)}>Add To Cart</button> </div> )} </div> ))} { total !== 0 ? <h1>Total ${total}</h1> : <h1>Total $0</h1> } { addToCartMessage && <h1>Item successfully added!</h1> } { removeFromCartMessage && <h1>Item successfully removed!</h1> } </div> ) } } export default App https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.unstack.html

它会将其中一个索引级别移动到DataFrame中的列。像这样:

unstack()