如何将函数应用于需要行索引的数据帧?

2024-05-15 23:41:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须使用ipums的调查数据来获得连续两个时期失业的平均人数。我写了一个使用索引和数据帧作为输入的函数

def u1(x,df):
if df.loc[x]['LABFORCE']==2 and df.loc[x]['CPSIDP']==df.loc[x+1]['CPSIDP']:
    if df.loc[x]['EMPSTAT']==21 or df.loc[x]['EMPSTAT']==22:
        return True
else: 
    return False

其中x是索引,df是数据帧。CPSIDP确定调查对象,LABFORCE检查受访者是否在劳动力市场,EMPSTAT是我需要用来检查受访者就业状况的工具。你知道吗

然后我计划用apply作为

result= df.apply(u1, axis=1)

不清楚我应该在函数中传递什么参数(如果这种方法在哲学上是错误的,请告诉我)。为索引传递一个数字或变量会给我一个“bool”对象,这是不可调用的错误。你知道吗

生成错误的最小数据帧子集(最左边的列是观察值的数目,它是我需要通过的x):

          YEAR  MONTH          CPSIDP  EMPSTAT  LABFORCE
15285896  2018      7  20180707096701       10         2
15285926  2018      7  20180707098301       10         2
15285927  2018      7  20180707098302       10         2
15285928  2018      7  20180707098303        0         0
15285929  2018      7  20180707098304        0         0
15285930  2018      7  20180707098305       10         2
15286095  2018      7  20180707108203       21         2

Tags: 数据对象函数dfreturnif错误loc
1条回答
网友
1楼 · 发布于 2024-05-15 23:41:48

IIUC使用函数中的逻辑创建booleanSeries会更有效。你知道吗

这里&AND运算符。你知道吗

result = (df['LABFORCE'].eq(2) & 
           df['CPSIDP'].eq(df['CPSIDP'].shift()) & 
           df['EMPSTAT'].isin([21,22]))

result

15285896    False
15285926    False
15285927    False
15285928    False
15285929    False
15285930    False
15286095    False

相关问题 更多 >