我正在尝试自动化和构建一个更干净的代码。 我希望我的代码得到一个CSV,按X分组(当前变量名为“Class”) 然后从平均值中删除每3std。你知道吗
import pandas as pd
import numpy as np
my_path = "data_291018.csv"
data_loc = pd.read_csv(my_path)
df = pd.DataFrame(data_loc)
df = df.drop(df.columns[df.columns.str.contains('unnamed', case=False)], axis=1)
class_8 = df[df["Class"] == 8]
class_11 = df[df["Class"] == 11]
heads = df.columns[4:].values
for i in heads:
class_8[i] = class_8[i].apply(lambda x: x if abs(x-class_8[i].mean()) < 3*class_8[i].std() else np.nan)
class_11[i] = class_11[i].apply(lambda x: x if abs(x-class_11[i].mean()) < 3*class_11[i].std() else np.nan)
both = pd.concat([class_8, class_11])
both.to_csv("data.csv", sep=',')
我试过而不是在两个不同的地方跑步
new_df = df.copy()
class_df = df.groupby("Class")
还有跑步
for i in heads:
new_df[i] = new_df[i].apply(lambda x: x if abs(x-class_df[i].mean()) < 3*class_df[i].std() else np.nan)
但它失败了。。。 “raise ValueError”(“只能比较相同的标签” ValueError:('Can only compare identially labeled Series objects',u'occurred at index subnum')”
你能帮帮我吗? 在以后的阶段中,我想按多个变量分组。你知道吗
非常感谢!你知道吗
DF看起来像这样:
SubjNum Class Genderm1f2 LRLevel exp1 exp2 exp3 exp4 exp5
8001 8 1 1 88 2 15 19 92
8002 8 2 1 85 59 19 20 97
8003 8 2 1 84 52 12 18 91
8004 11 2 1 85 44 17 20 92
8005 11 2 1 81 35 400 18 93
8006 11 1 1 190 56 20 17 97
我想从基于阶级/性别等的平均值中删除超过3个std的细胞
SubjNum Class Genderm1f2 LRLevel exp1 exp2 exp3 exp4 exp5
8001 8 1 1 88 . 15 19 92
8002 8 2 1 85 59 19 20 97
8003 8 2 1 84 52 12 18 91
8004 11 2 1 85 44 17 20 92
8005 11 2 1 81 35 . 18 93
8006 11 1 1 . 56 20 17 97
正如我所能理解的,我只是把我的观察放在这里,这样你就可以看看它是否与你所寻找的相关,但完美的答案仍在等待专家的回答:
示例中的模拟数据帧:
基于这两列的平均值:
基于这两列的标准偏差:
只需将两个所需列按聚合
mean()
&;std()
分组即可。你知道吗只需要一个groupby,它包含两个所需的列,其聚合值大于3的
mean()
&;std()
。你知道吗相关问题 更多 >
编程相关推荐