Python Pandas Concat“WHERE”满足条件

时间:2016-10-16 00:33:22

标签: python pandas join where concat

如何从多个Python Pandas数据帧“连接”特定列,WHERE许多数据帧中的每个数据帧中的另一列满足特定条件(这里通俗地称为条件“X”)。

在SQL中,使用JOIN子句与WHERE df2.Col2 =“X”和df3.Col2 =“X”和df4.col2 =“X”......等(可以动态运行)相比很简单。< / p>

就我而言,我想创建一个包含来自众多数据帧中所有“Col1”的大数据帧,但只包括Col1行值WHERE相应的Col2行值大于“0.8”。如果不满足此条件,则Col1值应为“NaN”。

任何想法都会有所帮助!提前谢谢!

1 个答案:

答案 0 :(得分:1)

考虑list s的dfs pd.DataFrame

import pandas as pd
import numpy as np


np.random.seed([3,1415])
dfs = [pd.DataFrame(np.random.rand(10, 2),
                    columns=['Col1', 'Col2']) for _ in range(5)]

我将pd.concat加入

raw concat
堆栈值而不考虑它来自哪里

pd.concat([d.Col1.loc[d.Col2.gt(.8)] for d in dfs], ignore_index=True)

0     0.850445
1     0.934829
2     0.879891
3     0.085823
4     0.739635
5     0.700566
6     0.542329
7     0.882029
8     0.496250
9     0.585309
10    0.883372
Name: Col1, dtype: float64

加入来源信息
使用keys参数

pd.concat([d.Col1.loc[d.Col2.gt(.8)] for d in dfs], keys=range(len(dfs)))

0  3    0.850445
   5    0.934829
   6    0.879891
1  1    0.085823
   2    0.739635
   7    0.700566
2  4    0.542329
3  3    0.882029
   4    0.496250
   8    0.585309
4  0    0.883372
Name: Col1, dtype: float64

另一种方法
使用query

pd.concat([d.query('Col2 > .8').Col1 for d in dfs], keys=range(len(dfs)))

0  3    0.850445
   5    0.934829
   6    0.879891
1  1    0.085823
   2    0.739635
   7    0.700566
2  4    0.542329
3  3    0.882029
   4    0.496250
   8    0.585309
4  0    0.883372
Name: Col1, dtype: float64