我有一个DataFrame:
import pandas as pd
import numpy as np
df = pd.DataFrame({'foo.aa': [1, 2.1, np.nan, 4.7, 5.6, 6.8],
'foo.fighters': [0, 1, np.nan, 0, 0, 0],
'foo.bars': [0, 0, 0, 0, 0, 1],
'bar.baz': [5, 5, 6, 5, 5.6, 6.8],
'foo.fox': [2, 4, 1, 0, 0, 5],
'nas.foo': ['NA', 0, 1, 0, 0, 0],
'foo.manchu': ['NA', 0, 0, 0, 0, 0],})
我想在以开头的列中选择1的值foo.
。除了以下以外,还有更好的方法吗:
df2 = df[(df['foo.aa'] == 1)|
(df['foo.fighters'] == 1)|
(df['foo.bars'] == 1)|
(df['foo.fox'] == 1)|
(df['foo.manchu'] == 1)
]
类似于写类似的东西:
df2= df[df.STARTS_WITH_FOO == 1]
答案应打印出如下所示的DataFrame:
bar.baz foo.aa foo.bars foo.fighters foo.fox foo.manchu nas.foo
0 5.0 1.0 0 0 2 NA NA
1 5.0 2.1 0 1 4 0 0
2 6.0 NaN 0 NaN 1 0 1
5 6.8 6.8 1 0 5 0 0
[4 rows x 7 columns]
只需执行列表推导即可创建您的列:
In [28]:
filter_col = [col for col in df if col.startswith('foo')]
filter_col
Out[28]:
['foo.aa', 'foo.bars', 'foo.fighters', 'foo.fox', 'foo.manchu']
In [29]:
df[filter_col]
Out[29]:
foo.aa foo.bars foo.fighters foo.fox foo.manchu
0 1.0 0 0 2 NA
1 2.1 0 1 4 0
2 NaN 0 NaN 1 0
3 4.7 0 0 0 0
4 5.6 0 0 0 0
5 6.8 1 0 5 0
另一种方法是从列创建序列,并使用向量化str方法startswith
:
In [33]:
df[df.columns[pd.Series(df.columns).str.startswith('foo')]]
Out[33]:
foo.aa foo.bars foo.fighters foo.fox foo.manchu
0 1.0 0 0 2 NA
1 2.1 0 1 4 0
2 NaN 0 NaN 1 0
3 4.7 0 0 0 0
4 5.6 0 0 0 0
5 6.8 1 0 5 0
为了实现您想要的目标,您需要添加以下内容以过滤不符合您的==1
条件的值:
In [36]:
df[df[df.columns[pd.Series(df.columns).str.startswith('foo')]]==1]
Out[36]:
bar.baz foo.aa foo.bars foo.fighters foo.fox foo.manchu nas.foo
0 NaN 1 NaN NaN NaN NaN NaN
1 NaN NaN NaN 1 NaN NaN NaN
2 NaN NaN NaN NaN 1 NaN NaN
3 NaN NaN NaN NaN NaN NaN NaN
4 NaN NaN NaN NaN NaN NaN NaN
5 NaN NaN 1 NaN NaN NaN NaN
编辑
看到您想要复杂的答案后,确定为:
In [72]:
df.loc[df[df[df.columns[pd.Series(df.columns).str.startswith('foo')]] == 1].dropna(how='all', axis=0).index]
Out[72]:
bar.baz foo.aa foo.bars foo.fighters foo.fox foo.manchu nas.foo
0 5.0 1.0 0 0 2 NA NA
1 5.0 2.1 0 1 4 0 0
2 6.0 NaN 0 NaN 1 0 1
5 6.8 6.8 1 0 5 0 0
问题内容: 我有一个 包含4个不同的。对于每一个孤单一个重要性的多数民众赞成。我想回到的地方是显示。因此,对于以下内容,我想在标记值为2时返回名称。 输出: 原来如此 我通过这样做 然后更改行。但这不是很有效。 我也希望将输出从 问题答案: 用途: 要么, 或者,作为列表: …或系列:
问题内容: 我确实进行了搜索,发现该SQL在最近的日期之前选择了行,该 行 与我想要的日期非常接近,但我似乎无法使它起作用。 我收到一个错误,因为选择列表中的列“ ID”不包含在聚合函数或GROUP BY子句中,所以它无效。 我想要每个不同名称的最新日期 这是我想要的一个例子 理想的结果 我正在使用Microsoft SQL Server 2008 感谢您的帮助或指向正确的方向 问题答案: Sel
本文向大家介绍pandas 选择某几列的方法,包括了pandas 选择某几列的方法的使用技巧和注意事项,需要的朋友参考一下 如下所示: 以上这篇pandas 选择某几列的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。
问题内容: 这是我上一个问题的跟进问题。我想编写一条MYSQL语句,以回显以字母B开头的每个条目。 Function.php Category.php?category = b 我猜就是那样。然后每个字母一个,另一个带杂项(数字等) 问题答案: 不过,请确保在上有一个索引!
问题内容: 当前,我们的开发团队使用这种模式,但是我不禁想知道是否存在更快或更有效的html方式来完成同一任务。 的HTML 这是Javascript: 问题答案: 这是我为此编写的函数。我不确定它是否比jQuery Templates更快。 它一次创建并附加一个Option元素,这可能比Templates慢 。我怀疑Templates会构建整个HTML字符串,然后一次创建所有DOM元素。那可能更
问题内容: 我有一个表,其中的一列也包含以数字开头的数据,在MySQL上 如何选择仅以数字开头的行? 问题答案: