我正在尝试使用pandas将预定义函数(myfunc)应用于DataFrame中的新系列。该函数将检查旧列(每行)中每个索引中的值是否大于前一个索引,如果是则返回1,否则返回0。
我还尝试了series.apply()函数,并且得到:在新创建的列中的所有行中。
def myfunc(x):
for i in range(0,86):
if x.iloc[i + 1] > x.iloc[i]:
yield 1
else:
yield 0
df2['Higher Inflation - US'] = df2['US'].map(myfunc)
print(df2)
我希望在新列中看到1和0。当我在函数中使用'print'而不是'yield'时,我得到了想要的结果,但是我想要做的就是将此函数应用于多个序列。
答案 0 :(得分:0)
您可以使用shift函数比较前几行中的值:
import pandas as pd
df2 = pd.DataFrame(
{
'US':[1,2,3,4,5,6,7,8,9,8,7,6,5,4,3,2,1]
})
def myfunc1(x):
if x:
return 1
else:
return 0
df2['Higher Inflation - US'] = (df2['US']>df2['US'].shift()).map(myfunc1)
df2
会返回:
US Higher Inflation - US
0 1 0
1 2 1
2 3 1
3 4 1
4 5 1
5 6 1
6 7 1
7 8 1
8 9 1
9 8 0
10 7 0
11 6 0
12 5 0
13 4 0
14 3 0
15 2 0
16 1 0
函数非常简单,最好用lambda代替:
(df2['US']>=df2['US'].shift()).apply(lambda x: 1 if x else 0)
结果相同