gpt4 book ai didi

python - 使用 'where' 在 Python 中过滤 pandas

转载 作者:行者123 更新时间:2023-11-30 23:28:04 25 4
gpt4 key购买 nike

我有一个关于在 Python 中过滤 pandas 的新问题。

我的原始数据框 DF,看起来像这样

date        currency      1Y    1Y1M    1Y2M    1Y3M    1Y4M
2013-09-25 EUR 0 0 0 0 0
2013-09-26 EUR 0 0 0 0 0
2013-09-27 EUR 0 0 0 0 0
2013-09-28 EUR 0 0 0 0 0
2013-09-29 EUR 0 0 0 0 0
2013-09-25 USD 0 0 0 0 0
2013-09-26 USD 0 -2 -4 -8 -10
2013-09-27 USD 0 -1 -1 -6 -1
2013-09-28 USD 0 -3 -6 -2 -6
2013-09-29 USD 0 -5 -1 -6 -7

我想做的是以某种方式过滤“USD”上的数据,并将符号更改为符合条件的所有可用数据。我希望更改原始数据(因此不是副本),即生成的数据帧(即 DF)将是,

date        currency      1Y    1Y1M    1Y2M    1Y3M    1Y4M
2013-09-25 EUR 0 0 0 0 0
2013-09-26 EUR 0 0 0 0 0
2013-09-27 EUR 0 0 0 0 0
2013-09-28 EUR 0 0 0 0 0
2013-09-29 EUR 0 0 0 0 0
2013-09-25 USD 0 0 0 0 0
2013-09-26 USD 0 2 4 8 10
2013-09-27 USD 0 1 1 6 1
2013-09-28 USD 0 3 6 2 6
2013-09-29 USD 0 5 1 6 7

我尝试过使用“where”函数(通过打印来查看效果)

mask = DF['currency'].str.contains('USD')
print DF.ix[mask,'1Y1M']
DF.where(DF[~mask], -1 * DF,inplace=True)
print data_BBG.ix[mask,'1Y1M']

但是打印结果没有显示任何效果。

任何见解都会很棒!

最佳答案

df.loc[df['currency']=='USD', '1Y':'1Y4M'] *= -1

产量

         date currency  1Y  1Y1M  1Y2M  1Y3M  1Y4M
0 2013-09-25 EUR 0 0 0 0 0
1 2013-09-26 EUR 0 0 0 0 0
2 2013-09-27 EUR 0 0 0 0 0
3 2013-09-28 EUR 0 0 0 0 0
4 2013-09-29 EUR 0 0 0 0 0
5 2013-09-25 USD 0 0 0 0 0
6 2013-09-26 USD 0 2 4 8 10
7 2013-09-27 USD 0 1 1 6 1
8 2013-09-28 USD 0 3 6 2 6
9 2013-09-29 USD 0 5 1 6 7

虽然 DF['currency'].str.contains('USD') 可能比 df['currency']=='USD' 更快,但我建议使用后者来保证您只选择货币完全等于美元的行。前者可能包含货币恰好包含字母 USD 的行。我不确定这是否可能,但为什么要冒险。

关于python - 使用 'where' 在 Python 中过滤 pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21825715/

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