【发布时间】:2018-10-10 02:52:02
【问题描述】:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
data={'state':[1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4],
'year':[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3],
'pop':[11, 22, 0, 33, 44, 32, 45, 66, 34, 12, 32, 0],
'gdp':[123, 341, 554, 654, 245, 665, 332 ,321, 344, 232, 542, 221]}
frame=pd.DataFrame(data)
def treat(group):
if group.ix[group.year==3, 'pop']!=0:
group['Treated']=1
else:
group['Treated']=0
frame.groupby('state').apply(treat)
我正在尝试根据某些条件创建一个变量frame['Treated']。
if ('year'==3) and ('pop'!=0) - 我认为 'state' 在 Treated 组中(所以我创建了一个名为 'Treated' 的变量)。
不幸的是,我遇到了一个错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我的代码有什么问题?你知道我该如何解决这个问题吗?
重新编辑 感谢您的友好回答,很抱歉没有清楚地描述我的问题。
我正在尝试再次描述我的问题。 对于状态 1 ,第 3 年的 pop 为 0 ,因此状态 1 不在处理组中(如下所示,每年状态 1 的 frame['Treated']=0 ) 对于状态2,在第3年pop不等于0,所以状态2在处理组中(如下图,对于状态2,每一年frame['Treated']=1) 出于类似原因处理其他状态。 最终结果如下。
state year pop gdp Treated
0 1 1 11 123 0
1 1 2 22 341 0
2 1 3 0 554 0
3 2 1 33 654 1
4 2 2 44 245 1
5 2 3 32 665 1
6 3 1 45 332 1
7 3 2 66 321 1
8 3 3 34 344 1
9 4 1 12 232 0
10 4 2 32 542 0
11 4 3 0 221 0
【问题讨论】:
标签: python python-3.x pandas apply pandas-groupby