2016-05-20 34 views
1

我是Python和數據框的新手。我在想,如果有一個更好的辦法做這樣的事情:我需要一個ID /索引列,所以我可以用它在數學公式(sin(2*pi*id)sin(2*pi*datetime)效果更好)有更好的方法來索引數據框嗎?

df['Datetime'] = df.index 
df.reset_index(inplace=True, drop=True) 
df['id'] = df.index 
df.index = df['Datetime'] 
df.drop('Datetime', axis=1, inplace=True) 

有沒有更容易(Pythonic)的方式來生成它,而不必移動列?

更新:

print(df.index) 
print(df['id']) 

輸出:

DatetimeIndex(['2013-01-03', '2013-01-04', '2013-01-07', '2013-01-08', 
       '2013-01-09', '2013-01-10', '2013-01-11', '2013-01-14', 
       '2013-01-15', '2013-01-16', 
       ... 
       '2014-01-20', '2014-01-21', '2014-01-22', '2014-01-23', 
       '2014-01-24', '2014-01-27', '2014-01-28', '2014-01-29', 
       '2014-01-30', '2014-01-31'], 
       dtype='datetime64[ns]', length=282, freq=None, tz='UTC') 
2013-01-03 00:00:00+00:00  0 
2013-01-04 00:00:00+00:00  1 
2013-01-07 00:00:00+00:00  2 
2013-01-08 00:00:00+00:00  3 
2013-01-09 00:00:00+00:00  4 
2013-01-10 00:00:00+00:00  5 
2013-01-11 00:00:00+00:00  6 
2013-01-14 00:00:00+00:00  7 
+1

你並不需要'滴/ set'索引,你可以通過index作爲參數,所以'np.sin(2 * pi * df.index)'應該可以工作,也可以使用'set_Index'和'reset_index(drop = True)'代替你想要做的事 – EdChum

+0

你能提供嗎一些示例輸入/輸出數據,用於表示「在mathem中使用它」 atical公式「,以及您目前如何執行此過程?聽起來你不應該需要操縱索引來做到這一點,但沒有一個具體的例子就不清楚了。 – root

+0

@EdChum感謝您告訴我關於'set_Index';下次我會記住這一點。 –

回答

1

你可以使用pd.DataFrame重新構造所需的數據幀。

import numpy as np 
import pandas as pd 

df = pd.DataFrame(index=pd.date_range('2009-1-1', periods=4)) 
df['Datetime'] = df.index 
df.reset_index(inplace=True, drop=True) 
df['id'] = df.index 
df.index = df['Datetime'] 
df.drop('Datetime', axis=1, inplace=True) 

相當於

df = pd.DataFrame(index=pd.date_range('2009-1-1', periods=4)) 
df = pd.DataFrame({'id': np.arange(len(df))}, index=df.index) 
#    id 
# 2009-01-01 0 
# 2009-01-02 1 
# 2009-01-03 2 
# 2009-01-04 3 

或者,如A L points out,你可以簡單地使用

df['id'] = np.arange(len(df)) 
+1

感謝這是我最終做了'df ['id'] = np.arange(len(df))' –

+0

啊,是的,這更簡單。 – unutbu

相關問題