我在数据框(名称:DF)中排序数据,其结构如
Currency Date 1Y 2Y 3Y
0 EUR 2013-09-25 0,198 0,307 0,485
1 EUR 2013-09-26 0,204 0,318 0,497
2 USD 2013-09-25 0,306 0,506 0,900
3 USD 2013-09-26 0,706 0,706 1,050
我现在正在尝试计算每一行之间的差异,即在每个连续日期之间取差异,将第一个日期设置为'0' - 为每种货币。我希望得到一个结果,如
Currency Date 1Y 2Y 3Y
0 EUR 2013-09-25 0,000 0,000 0,000
1 EUR 2013-09-26 0,006 0,011 0,012
2 USD 2013-09-25 0,000 0,000 0,000
3 USD 2013-09-26 0,400 0,200 0,150
在使用
之前,我看到过类似的问题DF_diff = DF.set_index('Date').diff()
但在该示例中,实际行中没有涉及字符串,并且没有(在此示例中)货币名称的标准。
我该如何管理?任何帮助都会非常明显。
答案 0 :(得分:4)
您可以按'Currency'
进行分组并应用diff
,但首先您需要将数据转换为float
,试试这个:
df.loc[:,'1Y':'3Y'] = df.loc[:,'1Y':'3Y'].applymap(lambda x: float(x.replace(",",".")))
df2 = df.set_index('Date').groupby('Currency').apply(lambda x: x.loc[:,'1Y':'3Y'].diff()).fillna(0)
print df2
输出:
1Y 2Y 3Y
Date
2013-09-25 0 0 0
2013-09-26 0.006 0.011 0.012
2013-09-25 0 0 0
2013-09-26 0.4 0.2 0.15
要获得'Currency'
并重置索引,您可以执行以下操作:
df2['Currency'] = df.set_index('Date')['Currency']
df2['Date'] = df2.index
df2 = df2.reset_index(drop=True)
df2 = df2[['Currency','Date','1Y','2Y','3Y']]
print df2
输出继电器:
Currency Date 1Y 2Y 3Y
0 EUR 2013-09-25 0 0 0
1 EUR 2013-09-26 0.006 0.011 0.012
2 USD 2013-09-25 0 0 0
3 USD 2013-09-26 0.4 0.2 0.15