如何使用 iloc 将条件语句应用于 Pandas Dataframe 上的多个列?
How do I apply conditional statements to multiple columns on Pandas Dataframe using iloc?
假设我有这样的数据框:
# importing pandas and numpy
import pandas as pd
import numpy as np
# create a sample dataframe
data = pd.DataFrame({
'A' : [ 1, 2, 3, -1, -2, 3],
'B' : [ -1, -2, -3, 12, -12, -3],
'C' : [ 1, -2, 3, -1, -2, 13],
'D' : [ -1, 2, 3, -1, 2, -3],
'E' : [ 1, 12, 3, 11, -2, 3]
})
# view the data
data
这给出:
A B C D E
0 1 -1 1 -1 1
1 2 -2 -2 2 12
2 3 -3 3 3 3
3 -1 12 -1 -1 11
4 -2 -12 -2 2 -2
5 3 -3 13 -3 3
现在,我的问题是如何将 if 语句应用于所有列和行,从而导致 table 的所有值都被 if 语句值替换。
我要应用的等式是:
if x <= 0:
0
else:
x
因此在这种情况下,结果数据将消除所有负值:
A B C D E
0 1 0 1 0 1
1 2 0 0 2 12
2 3 0 3 3 3
3 0 12 0 0 11
4 0 0 0 2 0
5 3 0 13 0 3
我尝试使用以下位置并将它们应用于 A、B、C、D 和 E:
data.loc[(data.A <= 0), ['A']] = 0
data.loc[(data.A > 0), ['A']] = data.A
但这不是最佳解决方案,因为我的列可能不止 A、B、C、D 和 E。另外,有时我需要求解其他不等式。
任何指导将不胜感激。
谢谢!
将DataFrame.clip
与lower
一起使用:
df = data.clip(lower=0)
print (df)
A B C D E
0 1 0 1 0 1
1 2 0 0 2 12
2 3 0 3 3 3
3 0 12 0 0 11
4 0 0 0 2 0
5 3 0 13 0 3
仅部分列:
cols = ['A','B','C']
data[cols] = data[cols].clip(lower=0)
print (data)
A B C D E
0 1 0 1 -1 1
1 2 0 0 2 12
2 3 0 3 3 3
3 0 12 0 -1 11
4 0 0 0 2 -2
5 3 0 13 -3 3
假设我有这样的数据框:
# importing pandas and numpy
import pandas as pd
import numpy as np
# create a sample dataframe
data = pd.DataFrame({
'A' : [ 1, 2, 3, -1, -2, 3],
'B' : [ -1, -2, -3, 12, -12, -3],
'C' : [ 1, -2, 3, -1, -2, 13],
'D' : [ -1, 2, 3, -1, 2, -3],
'E' : [ 1, 12, 3, 11, -2, 3]
})
# view the data
data
这给出:
A B C D E
0 1 -1 1 -1 1
1 2 -2 -2 2 12
2 3 -3 3 3 3
3 -1 12 -1 -1 11
4 -2 -12 -2 2 -2
5 3 -3 13 -3 3
现在,我的问题是如何将 if 语句应用于所有列和行,从而导致 table 的所有值都被 if 语句值替换。
我要应用的等式是:
if x <= 0:
0
else:
x
因此在这种情况下,结果数据将消除所有负值:
A B C D E
0 1 0 1 0 1
1 2 0 0 2 12
2 3 0 3 3 3
3 0 12 0 0 11
4 0 0 0 2 0
5 3 0 13 0 3
我尝试使用以下位置并将它们应用于 A、B、C、D 和 E:
data.loc[(data.A <= 0), ['A']] = 0
data.loc[(data.A > 0), ['A']] = data.A
但这不是最佳解决方案,因为我的列可能不止 A、B、C、D 和 E。另外,有时我需要求解其他不等式。
任何指导将不胜感激。
谢谢!
将DataFrame.clip
与lower
一起使用:
df = data.clip(lower=0)
print (df)
A B C D E
0 1 0 1 0 1
1 2 0 0 2 12
2 3 0 3 3 3
3 0 12 0 0 11
4 0 0 0 2 0
5 3 0 13 0 3
仅部分列:
cols = ['A','B','C']
data[cols] = data[cols].clip(lower=0)
print (data)
A B C D E
0 1 0 1 -1 1
1 2 0 0 2 12
2 3 0 3 3 3
3 0 12 0 -1 11
4 0 0 0 2 -2
5 3 0 13 -3 3