减去列类型不同的列中的行

2024-04-26 05:44:48 发布

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

我在数据帧(名称: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()

但在该示例中,实际行中没有涉及字符串,并且(在本例中)货币名称没有条件。你知道吗

我该怎么办?任何帮助都是值得赞赏的。你知道吗


Tags: 数据名称dfdateindex排序货币diff
1条回答
网友
1楼 · 发布于 2024-04-26 05:44:48

您可以按'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

相关问题 更多 >