使用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)
答案 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')
您的代码正在处理我的数据,当存储为列时只需将我转换为字符串
#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