Python:重新组织一个数据帧,使重复的值出现在一列中。

2024-10-05 17:23:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,看起来像这样:

     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

考虑到这个数据帧,我想让它看起来像这样:

^{pr2}$

基本上,我想要的是将每个日期作为一个新列,并在该列中放置相应的值。我不会说“过滤”或“删除”重复,我认为这更像是重新排列。在

这两个数据帧都是我生成的,但问题是要获取这些数据,我必须调用一个API。在第一个数据帧中,我只进行一次调用并提取所有这些数据,而在另一个数据帧中,每个日期我都会进行一次调用。所以第1个比第2个更有效,并且认为这是正确的调用,但我在重新组织数据帧以满足我需要的这一部分中陷入了困境。在

我想创建一个空的数据帧,然后填充它,方法是在“Instrument”列中选择重复元素的索引,使用这些索引从“Total Return”列中获取元素,然后相应地将这些元素放置在该数据块中,但我不知道该怎么做。在

如果有人能帮我,我很乐意知道。在

现在还不确定是否有用,但是我在第二个版本中是如何生成数据帧的(在填充它之前):

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)

Tags: csv数据import元素datetimedatereturnstart
2条回答

看起来像这样pandas.pivot_表()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')

这将返回以下结果:

^{pr2}$

您可以使用pd.crosstab

pd.crosstab(df.Instrument, df['Date'],values=df['Total Return'], aggfunc='mean')

输出:

^{pr2}$

相关问题 更多 >