在C中索引数组非常简单,括号可以很好地处理算术,因此可以比较相邻的值。这就是我想在Pandas中使用iterrows()做的事情,但我找不到一个合适的例子来说明如何做到这一点。请考虑以下事项:
Year Name Winner Count
432 1936 Alice 0.0 2
538 1937 Alice 1.0 2
6391 1985 Bob 1.0 2
6818 1989 Brad 0.0 2
爱丽丝在1936年没有获奖,但她在1937年赢了一个。我需要迭代所有的行,1)检查行n中的年份是否紧跟在行n - 1的年份之后,2)如果是的话,主题是否在第二年赢得而不是第一年?爱丽丝符合要求,我想在框架中打印出她的名字和符合标准的其他人。
我开始了。 。 。
for index, row in df.iterrows():
if df['Year'] > df[df.Year - 1]:
除其他外,我得到的显式转换为int(即Year)的数据类型现在作为字符串返回。有没有办法做到这一点,还是应该探索不同的方法?
答案 0 :(得分:1)
以下是一些增强的样本数据,以说明边缘情况:
Year Name Winner Count
432 1936 Alice 0.0 2
538 1937 Alice 1.0 2
6390 1985 Bob 1.0 2
6817 1989 Brad 0.0 2
433 1997 Alice 0.0 2
539 1993 Alice 1.0 2
6391 1986 Bob 1.0 2
6818 1990 Brad 0.0 2
6819 1991 Brad 0.0 2
此方法按Name
和Year
对行进行排序,然后确定某一年是否符合纳入标准(即,与前一年相同,并获胜)。
然后,一个简单的groupby()
找到符合条件的科目。
import pandas as pd
df = pd.read_clipboard()
df.sort_values(['Name','Year'], inplace=True)
# eligible = consecutive year and won in that year
df['eligible'] = (df.Year.subtract(df.Year.shift()) == 1.) & (df.Winner)
# identify any person with at least one eligible year
df.groupby('Name').eligible.any())
输出:
Name
Alice True
Bob True
Brad False