flyps 发表于 2021-9-6 19:52:32

关于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 19:52:33

本帖最后由 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:41:10

本帖最后由 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)

louxinghao 发表于 2021-9-6 20:48:59

为什么跳过 9 之后就变成 12 再操作了,没明白

flyps 发表于 2021-9-6 21:20:35

suchocolate 发表于 2021-9-6 20:41
得自己写函数了

谢谢,不过使用while循环,速度太慢,因为实际要操作的DataFrmae的行数可能有上百万行

flyps 发表于 2021-9-6 21:34:14

louxinghao 发表于 2021-9-6 20:48
为什么跳过 9 之后就变成 12 再操作了,没明白

我觉得我已经描述的很清楚了

某一天 发表于 2021-9-7 00:15:45

学习学习

suchocolate 发表于 2021-9-7 09:55:18

flyps 发表于 2021-9-6 21:20
谢谢,不过使用while循环,速度太慢,因为实际要操作的DataFrmae的行数可能有上百万行

所以你想用啥?

louxinghao 发表于 2021-9-7 15:22:26

flyps 发表于 2021-9-6 21:20
谢谢,不过使用while循环,速度太慢,因为实际要操作的DataFrmae的行数可能有上百万行

你想要的时效是多久呢,上百万行一个循环也没多久啊

阿奇_o 发表于 2021-9-7 22:12:24

好像很简单的样子。。
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

傻眼貓咪 发表于 2021-9-8 12:49:12

{:5_105:}
页: [1]
查看完整版本: 关于pandas的apply如何应用?谢谢