关于pandas的apply如何应用?谢谢
本帖最后由 flyps 于 2021-9-6 19:55 编辑下面的代码,是求得df中所有的,每个数字的余数,而我并不想求得所有号码的余数,我希望,如,df.loc余数为1,就跳过1行不操作,到df.loc再操作求余,df.loc余数为9,则跳过9行不操作,到df.loc再操作求余。
import numpy as np
import pandas as pd
A = np.random.randint(0,100,100)
df = pd.DataFrame(A,columns=['a'])
df
'''
a
0 41
1 79
2 49
3 2
4 51
... ...
95 68
96 5
97 12
98 43
99 23
100 rows × 1 columns
'''
def calc(x):
return x % 10
ex = df['a'].apply(calc)
ex
'''
0 1
1 9
2 9
3 2
4 1
..
95 8
96 5
97 2
98 3
99 3
Name: a, Length: 100, dtype: int64
'''
本帖最后由 louxinghao 于 2021-9-6 22:33 编辑
flyps 发表于 2021-9-6 21:34
我觉得我已经描述的很清楚了
看明白了
import numpy as np
import pandas as pd
A = np.random.randint(0,100,100)
df = pd.DataFrame(A,columns=['a'])
n = 0
def calc(x):
global n
if x != n:
return None
r = df.loc.a % 10
n = x + r + 1
return r
# 返回 nan 的就是不计算的
df['b'] = df.index.map(calc) 本帖最后由 suchocolate 于 2021-9-6 20:54 编辑
得自己写函数了
import numpy as np
import pandas as pd
def test(df):
row = 0 # 初始行0
while row < 100: # 行数大于99时结束函数
r = df['a'] % 10 # 当前元素除10的余数
print(r)
row += (r + 1) # 余数+1就是下次要看的行
if __name__ == "__main__":
A = np.random.randint(0, 100, 100)
df = pd.DataFrame(A, columns=['a'])
test(df)
为什么跳过 9 之后就变成 12 再操作了,没明白 suchocolate 发表于 2021-9-6 20:41
得自己写函数了
谢谢,不过使用while循环,速度太慢,因为实际要操作的DataFrmae的行数可能有上百万行 louxinghao 发表于 2021-9-6 20:48
为什么跳过 9 之后就变成 12 再操作了,没明白
我觉得我已经描述的很清楚了
学习学习 flyps 发表于 2021-9-6 21:20
谢谢,不过使用while循环,速度太慢,因为实际要操作的DataFrmae的行数可能有上百万行
所以你想用啥? flyps 发表于 2021-9-6 21:20
谢谢,不过使用while循环,速度太慢,因为实际要操作的DataFrmae的行数可能有上百万行
你想要的时效是多久呢,上百万行一个循环也没多久啊 好像很简单的样子。。
In : df
Out:
a
010
121
233
341
455
In : df.a.apply(lambda x: x if x%10 == 1 else x**2)# 余数为1,则保持原值;余数不为1,则求计算该值的平方
Out:
0 100
1 21
2 1089
3 41
4 3025
Name: a, dtype: int64
In : df.a.apply(lambda x: x if x%10 == 1 else x%10) # 余数为1,则保持原值;余数不为1,则计算它对10的余数。
Out:
0 0
1 21
2 3
3 41
4 5
Name: a, dtype: int64 {:5_105:}
页:
[1]