python - 当列匹配时过滤来自两个 pandas DataFrame 的数据

标签 python pandas

假设我有以下两个 pandas.DataFramedf0df1 :

import pandas as pd

# 1st data set
dat0 = [['A0', 'B0', 'C0', 'case0', 1],
        ['A0', 'B2', 'C0', 'case0', 2],
        ['A1', 'B0', 'C0', 'case0', 3],
        ['A1', 'B1', 'C0', 'case0', 4],
        ['A0', 'B0', 'C1', 'case0', 5]]
df0 = pd.DataFrame(dat0, columns=['colA', 'colB', 'colC', 'colCase', 'colVal'])

# 2nd data set
dat1 = [['A0', 'B1', 'C2', 'case1', 6],
        ['A0', 'B2', 'C2', 'case1', 7],
        ['A1', 'B0', 'C2', 'case1', 8],
        ['A2', 'B2', 'C2', 'case1', 9]]
df1 = pd.DataFrame(dat1, columns=['colA', 'colB', 'colC', 'colCase', 'colVal'])

我试图获取对于每对列(A、B)都有 case0 和 case1 值(即每个 DF 中的值)的所有行。

如果重要的话,我不能在 DataFrame 中包含“重复”行:集合(A、B、C、case)在每个 DF 中都是唯一的。

所以我想得到一个看起来像这样的代码:

# Merge the DataFrames
df = pd.concat([df0, df1])  # maybe concat is not a good starting point

for a in ['A0', 'A1', 'A2']:
    for b in ['B0', 'B1', 'B2']:
        table = my_great_function(df, a, b)
        if table:
            print '---'
            print table

并得到以下结果:

---
  colA colB colC colCase  colVal
1   A0   B2   C0   case0       2
1   A0   B2   C2   case1       7
---
  colA colB colC colCase  colVal
2   A1   B0   C0   case0       3
2   A1   B0   C2   case1       8

注意,我不想得到只出现一行的结果,也不想得到两行或更多行具有相同大小写的结果。

有什么建议吗?

最佳答案

你可以做类似的事情。如果这不完全是您想要的,请相应地修改条件(这里每个 g 代表具有 colA 和 colB 的唯一组合的子数据框):

for _, g in df.groupby(["colA", "colB"]):
    case_lst = g.colCase.tolist()
    if 'case0' in case_lst and 'case1' in case_lst:
        print("--------")
        print(g)

--------
  colA colB colC colCase  colVal
1   A0   B2   C0   case0       2
1   A0   B2   C2   case1       7
--------
  colA colB colC colCase  colVal
2   A1   B0   C0   case0       3
2   A1   B0   C2   case1       8

关于python - 当列匹配时过滤来自两个 pandas DataFrame 的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41169561/

相关文章:

python - Pandas 根据同一数据框中的另一个系列拆分一个系列

python - 更好的算法(比使用字典)来枚举具有给定总和的对。

python - 如何使用 python 子进程从 curl 检索信息

python - 如何从包含 DataFrame 的字典创建 DataFrame?

python - 在 Python 中使用 map() 有条件地迭代不相等的列表

python - 如何从 pandas groupby 的多个列中获取唯一值

python - 数据框 reshape

python - 通过应用具有多个返回值的函数创建多个 pandas DataFrame 列

python - 将颜色列表传递给 pandas .p​​lot

python - 如何在 matplotlib python 中生成每年发生次数的条形图?