python - 提取/附加满足涉及多列的复杂条件的 Pandas 数据框行

标签 python pandas filter conditional-statements

我无法理解数据帧循环的工作原理。

我在某处发现如果你写:

for row in df.iterrows()

您将无法访问行['column1'],而必须使用

for row,index in df.iterrows() 然后就可以了。

现在我想通过将行添加到新的数据帧 newdf.append(row) 来创建我在循环中找到的信号集合这可行,但它失去了被字符串引用的能力.我必须如何将这些行添加到我的数据框中才能使其正常工作?

详细代码:

dataframe1 = DataFrame(np.random.randn(10, 5), columns=['a','b','c', 'd', 'e'])
dataframe2 = DataFrame()

for index,row in dataframe1:
   if row['a'] == 5
       dataframe2.append(row)

print dataframe2['b']

这行不通,因为他不会接受 dataframe2 括号内的字符串。 是的,这可以更容易地完成,但为了争论起见,我们可以说它不能(比 if 更复杂的逻辑)。

在我的真实代码中,大约有十个不同的 if 和 else 决定如何处理该特定行(以及在循环内做其他事情)。我不是在谈论过滤,而只是以一种保留索引的方式将行添加到新的数据框中,这样我就可以引用列的名称

最佳答案

pandas 中,如果需要,过滤结果并将结果传递到新数据框非常简单,正如@smci 建议的 r

import numpy as np
import pandas as pd

dataframe1 = pd.DataFrame(np.random.randn(10, 5), columns=['a','b','c', 'd', 'e'])
dataframe1.head()

          a         b         c         d         e
0 -2.824391 -0.143400 -0.936304  0.056744 -1.958325
1 -1.116849  0.010941 -1.146384  0.034521 -3.239772
2 -2.026315  0.600607  0.071682 -0.925031  0.575723
3  0.088351  0.912125  0.770396  1.148878  0.230025
4 -0.954288 -0.526195  0.811891  0.558740 -2.025363

然后,要过滤,您可以这样做:

dataframe2=dataframe1.ix[dataframe1.a>.5]
dataframe2.head()

         a         b         c         d         e
0  0.708511  0.282347  0.831361  0.331655 -2.328759
1  1.646602 -0.090472 -0.074580 -0.272876 -0.647686
8  2.728552 -0.481700  0.338771  0.848957 -0.118124

编辑

OP 不想使用过滤器,所以这里是一个遍历行的示例:

np.random.seed(123)
dataframe1 = pd.DataFrame(np.random.randn(10, 5), columns=['a','b','c', 'd', 'e'])
## I declare the second df with the same structure
dataframe2 = pd.DataFrame(columns=['a','b','c', 'd', 'e'])

对于循环,我使用 iterrows,而不是 appending 到一个空数据框,我使用迭代器中的索引来放置在相同的索引位置空框。请注意,我说的是 > .5 而不是 = 5 否则生成的数据框肯定是空的。

for index, row in dataframe1.iterrows():
    if row['a'] > .5:

        dataframe2.loc[index] =  row

dataframe2

          a         b         c         d         e
1  1.651437 -2.426679 -0.428913  1.265936 -0.866740
4  0.737369  1.490732 -0.935834  1.175829 -1.253881

关于python - 提取/附加满足涉及多列的复杂条件的 Pandas 数据框行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33137506/

相关文章:

python - Box Api v2 SSL 版本 Python

python - 如何在 Python 中从 stdin 读取单个字符

python - 避免 SQLAlchemy 中的套接字超时

pandas - Python、Pandas 数据读取器和 Yahoo 错误 RemoteDataError : Unable to read URL

python - 取两个集合 'A' 和 'B' ,如何在 pandas 中创建一个集合 C= A 减去 B

angularjs - 如何在 AngularJS 过滤器中从数组中排除对象?

scala - 避免在对一系列混合项目的理解中进行类型转换

python - 从字典中删除重复的 Pandas 数据框

python - NetworkX/Pandas - 如何将每个节点的社区组输出到.txt

javascript - 如何向 Mapbox 传单 map 添加多个过滤器