如何访问存储在 DataFrame 中的对象属性来评估条件?
How accessing object attributes that are stored in a DataFrame to assess conditions?
请问,当对象存储在 pandas DataFrame 中时,是否有任何方法可以通过 loc
评估对象属性的条件?
类似于:
import pandas as pd
from dataclasses import dataclass
@dataclass(order=True, frozen=True)
class teo(object):
a : str
te = teo('b')
df = pd.DataFrame({'c':[te]})
df.loc[df['c'].getattr('a') == 'b']
以上示例输出:
AttributeError: 'Series' object has no attribute 'getattr'
感谢您的帮助!
最佳
您需要单独访问每个 teo
对象。一种方法是通过列表理解。
df.iloc[[i for i,v in df['c'].iteritems() if v.a=='b']]
您的语法不正确;应该是 getattr(teo, 'b')
要在列中广播,您可以使用 apply
和匿名函数:
df.loc[df['c'].apply(lambda x: getattr(x,'a')) == 'b']
请问,当对象存储在 pandas DataFrame 中时,是否有任何方法可以通过 loc
评估对象属性的条件?
类似于:
import pandas as pd
from dataclasses import dataclass
@dataclass(order=True, frozen=True)
class teo(object):
a : str
te = teo('b')
df = pd.DataFrame({'c':[te]})
df.loc[df['c'].getattr('a') == 'b']
以上示例输出:
AttributeError: 'Series' object has no attribute 'getattr'
感谢您的帮助! 最佳
您需要单独访问每个 teo
对象。一种方法是通过列表理解。
df.iloc[[i for i,v in df['c'].iteritems() if v.a=='b']]
您的语法不正确;应该是 getattr(teo, 'b')
要在列中广播,您可以使用 apply
和匿名函数:
df.loc[df['c'].apply(lambda x: getattr(x,'a')) == 'b']