提问人:Kyle_J 提问时间:11/20/2022 最后编辑:Kyle_J 更新时间:11/20/2022 访问量:23
修改 Pandas 数据帧
Modifying Pandas Dataframes
问:
尝试创建函数 X(df): 根据以下条件替换数据帧的 FIRST 列的值:
- 如果该值是介于 0 和 0.5 之间的数字(因此 0 <= 值 <= 0.5), 将此值替换为此行中所有列的值之和。
- 如果该值介于 1.0 和 2.0 之间(因此 1.0 <= 值 <= 2.0),请将 此值为 -99。 (如果在第 1 部分中,原始值为 0.1,并且所有列(在该行中)的总和为 1.5,则此值 然后在第 2 部分中被 -99 替换。
original df:
|idx| |A| |B|
|0| |0.4| 1.0
|1| |0.0| 0.5
|2| |10.0| 0.0
|3| |1.5| -100.0
|4| |0.1| 0.1
|5| |0.5| -10.0
I have this so far:
def X(df):
for i in df.iloc[:, 0]:
if (i >= 0) and (i <= 0.5):
df.iloc[:,0] = df.sum(axis=1)
elif (i>=1) and (i<=2):
df.iloc[:,0] = int(-99)
else:
continue
return df
'''
I got:
A B
idx
0 3.4 1.0
1 1.5 0.5
2 10.0 0.0
3 -298.5 -100.0
4 0.4 0.1
5 -29.5 -10.0
I was expecting:
A B
idx
0 0.5 1.0
1 0.5 0.5
2 10.0 0.0
3 -99 -100.0
4 0.2 0.1
5 -9.5 -10.0
答:
0赞
Panda Kim
11/20/2022
#1
例
data = {'A': {0: 0.4, 1: 0.0, 2: 10.0, 3: 1.5, 4: 0.1, 5: 0.5},
'B': {0: 1.0, 1: 0.5, 2: 0.0, 3: -100.0, 4: 0.1, 5: -10.0}}
df = pd.DataFrame(data)
输出():df
A B
0 0.4 1.0
1 0.0 0.5
2 10.0 0.0
3 1.5 -100.0
4 0.1 0.1
5 0.5 -10.0
法典
用np.select
import numpy as np
cond1 = (df['A'] >= 0) & (df['A'] <= 0.5)
cond2 = (df['A'] >= 1) & (df['A'] <= 2)
np.select([cond1, cond2], [df.sum(axis=1), -99], df['A'])
结果:
array([ 1.4, 0.5, 10. , -99. , 0.2, -9.5])
最后
将结果转换为A列
df.assign(A=np.select([cond1, cond2], [df.sum(axis=1), -99], df['A']))
期望输出:
A B
0 1.4 1.0
1 0.5 0.5
2 10.0 0.0
3 -99.0 -100.0
4 0.2 0.1
5 -9.5 -10.0
评论
0赞
Kyle_J
11/20/2022
这很好,但是如果我使用 iloc 而不是 df[A],我将如何更改 assign 函数?
0赞
Panda Kim
11/20/2022
没关系。pandas.pydata.org/docs/reference/api/......
0赞
Kyle_J
11/20/2022
#2
for idx, i in df.iterrows():
if i[0] >= 1.0 and i[0] <= 2.0:
i[0] = -99
elif i[0] >= 0 and i[0] <= 0.5:
if sum(i) >= 1.0 and sum(i) <= 2.0:
i[0] = -99
else:
i[0] = sum(i)
return df
评论