Python Pandas Dataframe 有条件地仅添加到负数
Python Pandas Dataframe conditional add to negative numbers only
这是一个随机整数数据帧,df:
df = pd.DataFrame(np.random.randint(-10,10,size=(12, 4)), columns=list('ABCD'))
Output:
A B C D
0 -6 0 -9 -9
1 -7 1 -7 -4
2 -10 -8 -7 7
3 -1 -7 -4 2
4 -1 1 7 5
5 8 7 4 -10
6 1 -1 -6 -6
7 -1 6 -1 8
8 -2 3 -4 5
9 -9 -6 6 -5
10 6 8 -1 2
11 9 -1 1 -5
对于 'D' 列中的所有负值,我想在不使用循环且不更改数据框中的任何其他值的情况下添加 10。
提前致谢!
df.D = df.D+np.where(df.D<0, 10, 0)
或者:
df.D = df.D.add(df.D.lt(0)*10)
A B C D
0 -10 -1 -6 3
1 -2 4 2 4
2 3 -8 0 5
3 3 2 -2 1
4 4 3 3 1
5 9 4 0 7
6 -8 -6 5 9
7 0 7 7 7
8 -9 3 -1 6
9 4 -4 0 7
10 4 -2 7 9
11 -4 -8 -1 9
时间:
看来 np.where 是最快的方法。
%%timeit
df.D.add(df.D.lt(0)*10)
331 µs ± 3.43 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%%timeit
df.D+np.where(df.D<0, 10, 0)
260 µs ± 5.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%%timeit
df.loc[df['D']<0, 'D'] = df['D']+10
804 µs ± 15.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
最好的方法是使用 loc:
df.loc[df['D']<0, 'D'] = df['D']+10
这是一个随机整数数据帧,df:
df = pd.DataFrame(np.random.randint(-10,10,size=(12, 4)), columns=list('ABCD'))
Output:
A B C D
0 -6 0 -9 -9
1 -7 1 -7 -4
2 -10 -8 -7 7
3 -1 -7 -4 2
4 -1 1 7 5
5 8 7 4 -10
6 1 -1 -6 -6
7 -1 6 -1 8
8 -2 3 -4 5
9 -9 -6 6 -5
10 6 8 -1 2
11 9 -1 1 -5
对于 'D' 列中的所有负值,我想在不使用循环且不更改数据框中的任何其他值的情况下添加 10。
提前致谢!
df.D = df.D+np.where(df.D<0, 10, 0)
或者:
df.D = df.D.add(df.D.lt(0)*10)
A B C D
0 -10 -1 -6 3
1 -2 4 2 4
2 3 -8 0 5
3 3 2 -2 1
4 4 3 3 1
5 9 4 0 7
6 -8 -6 5 9
7 0 7 7 7
8 -9 3 -1 6
9 4 -4 0 7
10 4 -2 7 9
11 -4 -8 -1 9
时间:
看来 np.where 是最快的方法。
%%timeit
df.D.add(df.D.lt(0)*10)
331 µs ± 3.43 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%%timeit
df.D+np.where(df.D<0, 10, 0)
260 µs ± 5.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%%timeit
df.loc[df['D']<0, 'D'] = df['D']+10
804 µs ± 15.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
最好的方法是使用 loc:
df.loc[df['D']<0, 'D'] = df['D']+10