如何使用periodindex到列名

时间:2019-07-14 09:18:42

标签: pandas dataframe

使用periodindex作为新列名并添加值。

我有一个看起来像这样的数据框:

A  B  C   D  
0  a  1  2  32  
1  b  3  4  33  
2  c  5  6  34  


timelist=['2010-01','2010-02',...]

我将时间表转换为四分之一:

periods=pd.PeriodIndex(timelist,freq="Q")

结果:

PeriodIndex(['2000Q1', '2000Q1', '2000Q1', '2000Q2', '2000Q2', '2000Q2','2000Q3', '2000Q3', '2000Q3', '2000Q4', ...

我想要的是:

a。简化时段

 PeriodIndex(['2000Q1','2000Q2','2000Q3',...

(但不要将其转换为字符串)

b。我可以将句点用作数据框的新列名称吗?   在里面放值吗?

类似:

x=0
for i in periods:
    df[i]=df.iloc[:,x:x+3].mean(axis=1)
    x=x+3
(but it failed)

2 个答案:

答案 0 :(得分:0)

a。输出pd.PeriodIndex()的数据类型是用于熊猫中字符串的对象。

b。您可以像这样在数据框中创建一个新列:

df["periods"]=pd.PeriodIndex(timelist,freq="Q")

它将创建一个新列“ periods”,其dtype是对象,您可以像这样检查该对象:

df["periods"].dtype

答案 1 :(得分:0)

timelist=['2010-01','2010-02','2010-03']
periods =  [i.split("-")[0]+"-"+"Q"+i.split("-")[-1][-1]for i in timelist]

# pd.PeriodIndex require list in the format ['2019-Q1'] your list contains ['2019-01'] so 01 was considered as quarter

periods= pd.PeriodIndex(periods,freq="Q")
print(periods)
PeriodIndex(['2010Q1', '2010Q2', '2010Q3'], dtype='period[Q-DEC]', freq='Q-DEC')

b部分

您的代码正在处理我的数据,当存储为列时只需将我转换为字符串

#I took sample data and it worked the way you wrote the code
import pandas_datareader as dr

df = dr.data.get_data_yahoo('btc-usd',start = '01-01-2015', end= '31-12-2018')
df.reset_index(inplace=True)

x=0
for i in periods:
    df[str(i)]=df.iloc[:,x:x+3].mean(axis=1)
    x=x+3

print(df)
       Close    Volume     AdjClose   2010Q1    2010Q2            2010Q3
0   318.239990  6472822 318.239990  313.990005  2.157817e+06    7.194831e+05
1   314.890015  4073067 314.890015  317.449997  1.357900e+06    4.528441e+05