【问题标题】:how to manipulate a DataFrame in which each value is a object?如何操作每个值都是对象的 DataFrame?
【发布时间】:2014-04-11 06:14:06
【问题描述】:

我有一个 DataFrame,其中每个值都是自定义类的对象,比如:

dc = {"c1":{"a1":CAppState(1,1), "a2":CAppState(2,4) }, "c2":{"a2":CAppState(2,5), "a3":CAppState(3,32)} }
df = pd.DataFrame(dc)

其中 CAppState 是一个类:

class CAppState(object):
    def __init__(self, nID, nValue):
        self.m_nID = nID
        self.m_nValue = nValue

我想知道如何对这个数据帧进行一些常见的操作,例如:cumsum() 或根据 CAppState.m_nValue 排序?

任何建议都将不胜感激。

【问题讨论】:

  • cumsum 之类的操作将对 DataFrame 中的值进行操作。因此,如果您想对您的对象进行操作,您可以实现 __add__ 等以便它们支持添加,或者您可以创建一个包含 m_nValue 值的新列并在其上使用 cumsum
  • @BrenBarn 谢谢,但是如果我在自定义类中有多个值怎么办,如何指定在 cumsum() 中使用哪个值?

标签: python pandas


【解决方案1】:

没有内置的方法可以做到这一点。您必须从您的对象和cumsum 创建一个系列。这可以通过map 轻松完成。例如:

df.c1.map(lambda x: x.m_nValue).cumsum()

你也可以使用operator.attrgetter:

df.c1.map(operator.attrgetter('m_nValue')).cumsum()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 2018-04-04
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多