gpt4 book ai didi

python - 使用 np.where 计算后如何保留 DataFrame/列和索引名称?

转载 作者:行者123 更新时间:2023-11-28 17:10:16 24 4
gpt4 key购买 nike

我有 2 个不同的 pd.DataFrames:

dailyRtn

date         A          B               C                                   
2017-12-25 0.069392 0.124916 0.119108
2017-12-26 0.020000 0.100000 0.080000
2017-12-27 1.000000 1.200000 1.500000

averageofP

date         A          B               C                                   
2017-12-25 0.059392 0.894916 0.419108
2017-12-26 0.021000 0.100000 0.990000
2017-12-27 1.500000 1.100000 1.800000

可以用下面的代码重现:

dailyRtn = pd.DataFrame([["2017-12-25",  0.069392,    0.124916,    0.119108],
["2017-12-26", 0.020000, 0.100000, 0.080000],
["2017-12-27", 1.000000, 1.200000, 1.500000]],
columns = ["date", "A", "B", "C"])

averageofP = pd.DataFrame([["2017-12-25", 0.059392, 0.894916, 0.419108],
["2017-12-26", 0.021000, 0.100000, 0.990000],
["2017-12-27", 1.500000, 1.100000, 1.800000]],
columns = ["date", "A", "B", "C"])

我正在尝试使用上面的 2 个 df 进行条件计算:

downsideDev = np.where(dailyRtn < averageofP, dailyRtn, "")

我的目标是拥有一个新的 DataFrame (downsideDev),它看起来与上面的表格相似,但其值来 self 使用 np.where 的条件参数。我知道 np.where 创建了一个 ndarray 所以我做了:

downsideDev = pd.DataFrame(downsideDev)

但是,当我查看 downsideDev 时,我之前的专栏:A、B、C 等和日期:2017-12-27 等都消失了并且是简单的整数 + 它不再是 DataFrame。我该如何解决这个问题?

最佳答案

IIUC,您可以使用set_index,然后在数据框构造函数中包含indexcolumns

dailyRtn = dailyRtn.set_index('date')
averageofP = averageofP.set_index('date')

downsideDev = np.where(dailyRtn < averageofP, dailyRtn, "")
downsideDev_df = (pd.DataFrame(downsideDev, index=dailyRtn.index, columns=dailyRtn.columns)
.reset_index())

print(downsideDev_df)

输出:

         date     A                    B                    C
0 2017-12-25 0.12491600000000001 0.11910799999999999
1 2017-12-26 0.02 0.08
2 2017-12-27 1.0 1.5

关于python - 使用 np.where 计算后如何保留 DataFrame/列和索引名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48060962/

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