这个问题与这两个问题another和thisone非常相关,我什至会使用这个问题上非常有用的公认解决方案中的示例。这是已接受的解决方案中的示例(归功于 unutbu):
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': 'foo bar foo bar foo bar foo foo'.split(),
'B': 'one one two three two two one three'.split(),
'C': np.arange(8), 'D': np.arange(8) * 2})
print(df)
# A B C D
# 0 foo one 0 0
# 1 bar one 1 2
# 2 foo two 2 4
# 3 bar three 3 6
# 4 foo two 4 8
# 5 bar two 5 10
# 6 foo one 6 12
# 7 foo three 7 14
print(df.loc[df['A'] == 'foo'])
Run Code Online (Sandbox Code Playgroud)
产量
A B C D
0 foo one 0 0
2 foo two 2 4
4 foo two 4 8
6 foo one 6 12
7 foo three 7 14
Run Code Online (Sandbox Code Playgroud)
但我想拥有 A 的所有行,并且只有 B 中包含“两个”的箭头。我的尝试是尝试
print(df.loc[df['A']) & df['B'] == 'two'])
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用。任何人都可以建议一种方法来实现这样的事情吗?如果解决方案有点通用,例如列 A 没有相同的值,即 'foo' 但具有不同的值,并且您仍然想要整个列,那将会有很大帮助。
小智 7
简单,如果你这样做的话
df[['A','B']][df['B']=='two']
Run Code Online (Sandbox Code Playgroud)
你会得到:
A B
2 foo two
4 foo two
5 bar two
Run Code Online (Sandbox Code Playgroud)
要同时过滤 A 和 B:
df[['A','B']][(df['B']=='two') & (df['A']=='foo')]
Run Code Online (Sandbox Code Playgroud)
你得到:
A B
2 foo two
4 foo two
Run Code Online (Sandbox Code Playgroud)
如果您想要所有列:
df[df['B']=='two']
Run Code Online (Sandbox Code Playgroud)
你会得到:
A B C D
2 foo two 2 4
4 foo two 4 8
5 bar two 5 10
Run Code Online (Sandbox Code Playgroud)
我想我理解你修改后的问题。根据 的条件进行子选择后B,即可选择所需的列,例如:
In [1]: df.loc[df.B =='two'][['A', 'B']]
Out[1]:
A B
2 foo two
4 foo two
5 bar two
Run Code Online (Sandbox Code Playgroud)
例如,如果我想连接 A 列的所有字符串,其中 B 列具有 value 'two',那么我可以这样做:
In [2]: df.loc[df.B =='two'].A.sum() # <-- use .mean() for your quarterly data
Out[2]: 'foofoobar'
Run Code Online (Sandbox Code Playgroud)
您还可以使用groupbyB 列的值,并从一个表达式中获得每个不同 B 组的串联结果:
In [3]: df.groupby('B').apply(lambda x: x.A.sum())
Out[3]:
B
one foobarfoo
three barfoo
two foofoobar
dtype: object
Run Code Online (Sandbox Code Playgroud)
要过滤A 并 B使用numpy.logical_and:
In [1]: df.loc[np.logical_and(df.A == 'foo', df.B == 'two')]
Out[1]:
A B C D
2 foo two 2 4
4 foo two 4 8
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31816 次 |
| 最近记录: |