gpt4 book ai didi

python - 减去具有不同列类型的 Pandas 中的行

转载 作者:太空宇宙 更新时间:2023-11-04 10:38:56 25 4
gpt4 key购买 nike

我在具有如下结构的数据框(名称: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()

但在那个例子中,实际行中没有涉及字符串,并且没有关于(在这个例子中)货币名称的标准。

我该如何管理它?任何帮助将不胜感激。

最佳答案

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

关于python - 减去具有不同列类型的 Pandas 中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21938440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com