![](/img/trans.png)
[英]How to round values only for display in pandas while retaining original ones in the dataframe?
[英]How to get the filtered dataframe for calculations while retaining the original one in pandas?
我对熊猫如何使用过滤后的行有些困惑。 假设我们有这个市场数据数据框“ df”:
Time Open High Low Close Volume
31.12.2003 23:00:00.000 82440 83150 82440 82880 47686.32
01.01.2004 23:00:00.000 82830 83100 82350 83100 37571.04
02.01.2004 23:00:00.000 83100 83100 83100 83100 0.00
现在,我们对行进行过滤,以仅在市场开放的那一天(交易量> 0)获得df
df=df[df['Volume']>0]
由于我们过滤了数据框的方式,有一些空行仍然具有索引和值,但是例如,如果这样做,它们就不会用于计算中:
df.mean()
过滤后的行的值不会出现在计算中。
令人困惑的部分是:
仅使用未过滤的值,如何计算从第3行算起的最后2个值的平均值? 意思是,如果我们将第2行过滤掉,则应该得到第3行和第1行的平均值。
-----------编辑--------------嘿,谢谢你的评论,试图更加清楚:
假设我们有以下示例数据框:
Index Volume
0 1
1 0
2 1
3 1
然后我们对其进行过滤:
df=df[df['Volume']>0]
如果我们将数据帧发送到numpy,则为了绘制或遍历该数据帧,它还将发送我们不需要的行。
如果我们迭代这些数据,它还将迭代(并考虑)我们要排除的索引。
那么,如何避免排除排除行的数据框副本,从而避免这两个问题?
我认为您在布尔索引方面遇到了一个非常普遍的问题。 当你试图筛选DataFrame
与DataFrame
的布尔值,则需要指定如何处理那里的东西是真正的某些列/行,但假的其他列/行的情况。 你想去的地方东西都是真的无处不在 ,或任何物品。
在这种情况下,这特别棘手,因为您的DataFrame
是一维的,因此您希望事情像Series
一样工作,而在其中没有歧义:对于Series
,行要么为True,要么为False; 在某些列中不能为True,而在其他列中不能为False。
要解决与DataFrames
的歧义,请使用any()
或all()
方法:
In [36]: df
Out[36]:
Volume
Index
0 1
1 0
2 1
3 1
[4 rows x 1 columns]
In [37]: df[(df > 0).all(1)]
Out[37]:
Volume
Index
0 1
2 1
3 1
[3 rows x 1 columns]
all()
内部的1
仅表示1
轴(列)
这是一个二维示例,可以帮助您解决问题:
In [39]: df = pd.DataFrame({"A": ['a', 'b', 'c', 'd'], "B": ['e', 'f', 'g', 'h']})
In [40]: df
Out[40]:
A B
0 a e
1 b f
2 c g
3 d h
[4 rows x 2 columns]
In [41]: bf = pd.DataFrame({"A": [True, True, False, False], "B": [True, False, True, False]})
In [42]: bf
Out[42]:
A B
0 True True
1 True False
2 False True
3 False False
[4 rows x 2 columns]
首先,以“错误”的方式解决歧义。 目前尚不清楚该如何处理(1,'B'),因为它在bf
false,但是有1
行和B
列,因此填充了一个NaN
:
In [43]: df[bf]
Out[43]:
A B
0 a e
1 b NaN
2 NaN g
3 NaN NaN
[4 rows x 2 columns]
全部都只匹配第一行,因为那是唯一两个都为True的行:
In [44]: df[bf.all(1)]
Out[44]:
A B
0 a e
[1 rows x 2 columns]
any
匹配除最后一行以外的所有内容,因为该行同时具有False
es
In [45]: df[bf.any(1)]
Out[45]:
A B
0 a e
1 b f
2 c g
[3 rows x 2 columns]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.