【问题标题】:How do I search for a tuple of values in pandas?如何在 pandas 中搜索值元组?
【发布时间】:2015-08-02 06:31:47
【问题描述】:

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

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]

【问题讨论】:

  • 请提供您想要实现的所需数据样本

标签: python python-3.x pandas


【解决方案1】:

这是用 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 中,则可以在没有交换器功能的情况下执行应用:

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

【讨论】:

    猜你喜欢
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 2017-09-09
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    相关资源
    最近更新 更多