如何在熊猫中搜索元组值?

时间:2015-08-02 06:31:47

标签: python python-3.x pandas

我正在尝试编写一个函数来交换带有pandas数据帧结果的目标字典。我想匹配一组值并换出新值。我尝试按如下方式构建它,但行选择不起作用。我觉得我在这里缺少一些关键功能。

import pandas
testData=pandas.DataFrame([["Cats","Parrots","Sandstone"],["Dogs","Cockatiels","Marble"]],columns=["Mammals","Birds","Rocks"])
target=("Mammals","Birds")
swapVals={("Cats","Parrots"):("Rats","Canaries")}
for x in swapVals:
    #Attempt 1:
    #testData.loc[x,target]=swapVals[x]
    #Attempt 2:
    testData[testData.loc[:,target]==x,target]=swapVals[x]

1 个答案:

答案 0 :(得分:0)

这是用Python 2编写的,但基本的想法应该适合你。它使用apply函数:

import pandas
testData=pandas.DataFrame([["Cats","Parrots","Sandstone"],["Dogs","Cockatiels","Marble"]],columns=["Mammals","Birds","Rocks"])
swapVals={("Cats","Parrots"):("Rats","Canaries")}
target=["Mammals","Birds"]

def swapper(in_row):
    temp =tuple(in_row.values)
    if temp in swapVals:
        return list(swapVals[temp])
    else:
        return in_row

testData[target] = testData[target].apply(swapper, axis=1)

testData

请注意,如果您将其他键加载到dict中,则可以在没有swapper函数的情况下执行apply:

import pandas
testData=pandas.DataFrame([["Cats","Parrots","Sandstone"],["Dogs","Cockatiels","Marble"]],columns=["Mammals","Birds","Rocks"])
swapVals={("Cats","Parrots"):("Rats","Canaries"), ("Dogs","Cockatiels"):("Dogs","Cockatiels")}
target=["Mammals","Birds"]

testData[target] = testData[target].apply(lambda x: list(swapVals[tuple(x.values)]), axis=1)

testData