我有一个如下所示的数据框:
Instrument Date Total Return
0 KYG2615B1014 2017-11-29T00:00:00Z 0.000000
1 KYG2615B1014 2017-11-28T00:00:00Z -10.679612
2 KYG2615B1014 2017-11-27T00:00:00Z -8.035714
3 JP3843250006 2017-11-29T00:00:00Z 0.348086
4 JP3843250006 2017-11-28T00:00:00Z 0.349301
5 JP3843250006 2017-11-27T00:00:00Z 0.200000
鉴于数据框架,我想让它看起来像这样:
11/27/2017 11/28/2017 11/29/2017
KYG2615B1014 -8.035714 -10.679612 0.000000
JP3843250006 0.200000 0.349301 0.348086
基本上我想要的是将每个日期作为新列放在该列中,并放置相应的值。我不会说"过滤"或"删除"重复,我说这更像是重新排列。
这两个数据帧都是由我生成的,但问题是要获取这些数据,我必须调用API。在第一个数据帧中,我只进行一次呼叫并提取所有这些数据,而在另一个数据帧中,我每个日期都进行一次呼叫。所以1st比第二个效率更高,并且认为这是正确的调用,但我仍然坚持将数据帧重组为我需要的部分。
我想创建一个空的数据框,然后通过选择' Instrument'中的重复元素的索引来填充它。列,使用这些索引从“总回报”中获取元素。列,然后相应地放置该数据块中的元素,但我不知道如何做到这一点。
如果有人可以帮助我,我会很高兴知道。
不确定此时是否有用,但这是我在第二版中生成数据框(填充之前)的方式:
import pandas as pd
import datetime
#Getting a list of dates
start=datetime.date(2017,11,27)
end=datetime.date.today() - datetime.timedelta(days=1)
row_dates=[x.strftime('%m/%d/%Y') for x in pd.bdate_range(start,end).tolist()]
#getting identifiers to be used on Eikon
csv_data=pd.read_csv('171128.csv', header=None)
identifiers=csv_data[0].tolist()
df=pd.DataFrame(index=identifiers, columns=row_dates)
答案 0 :(得分:1)
您可以使用pd.crosstab
:
pd.crosstab(df.Instrument, df['Date'],values=df['Total Return'], aggfunc='mean')
输出:
Date 2017-11-27T00:00:00Z 2017-11-28T00:00:00Z 2017-11-29T00:00:00Z
Instrument
JP3843250006 0.200000 0.349301 0.348086
KYG2615B1014 -8.035714 -10.679612 0.000000
答案 1 :(得分:1)
对我来说这看起来像pandas.pivot_table()pivot_table,请注意如果您认为会有重复项(例如每天只有一个读数),您可以添加一个agg函数。
import pandas as pd
instrument=['KYG2615B1014','KYG2615B1014','KYG2615B1014', 'JP3843250006', 'JP3843250006', 'JP3843250006']
date=['11/29/2017', '11/28/2017', '11/27/2017', '11/29/2017', '11/28/2017', '11/27/2017']
total_return=[0.0, -10.679612, -8.035714, 0.348086, 0.349301, 0.200000]
stacked = pd.DataFrame(dict(Instrument=instrument, Date=date, Total_return=total_return)
pd.pivot_table(stacked, values='Total_return', index='Instrument', columns='Date')
返回以下内容:
Date 11/27/2017 11/28/2017 11/29/2017
Instrument
JP3843250006 0.200000 0.349301 0.348086
KYG2615B1014 -8.035714 -10.679612 0.000000