索引在pandas数据帧中相互依赖的多个参数

时间:2015-12-17 15:24:29

标签: python pandas

假设我有一个pandas数据框和一个如下定义的字典:

import pandas as pd df = pd.DataFrame( { "c1": np.array(['a','a','b','b','a']) , "c2" : np.array([1,2,2,2,2])} )

  c1  c2
0  a   1
1  a   2
2  b   2
3  b   2
4  a   2

to_keep = {'a':[1],'b':[2,3]}

{'a': [1], 'b': [2, 3]}

我希望将这些元素保留在to_keep的键和值之一的位置。换句话说,我想得到以下数据帧:

  c1  c2
0  a   1
2  b   2
3  b   2

我尝试了很多东西,比如df[(df["c1"] in to_keep.keys) and df["c2"] in to_keep["c1"]],但问题是我无法将正确的参数传递给to_keep dict来获取适当的值。我曾想过列出c1c2的所有可能组合,但这对于我拥有的数据集的大小来说可能有点低效。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

尝试在数据框中转换to_keep,然后将其与原始内容合并,例如Compare Python Pandas DataFrames for matching rows

答案 1 :(得分:1)

充实lib's suggestion

import pandas as pd
import numpy as np
df = pd.DataFrame( 
    { "c1": np.array(['a','a','b','b','a']) , 
      "c2": np.array([1,2,2,2,2])} )
to_keep = {'a':[1],'b':[2,3]}
to_keep = pd.DataFrame([(key, item) for key, val in to_keep.items() for item in val], 
                       columns=['c1', 'c2'])
#   c1  c2
# 0  a   1
# 1  b   2
# 2  b   3

print(pd.merge(df, to_keep, how='inner'))

产量

  c1  c2
0  a   1
1  b   2
2  b   2