所以这是我想要做的类似情况
data = pd.read_csv(data)
df = pd.DataFrame(data)
print(df)
Run Code Online (Sandbox Code Playgroud)
数据框如下所示
... 'd1' 'd2' 'd3... 'd13'
0 ... 0 0 0... 0
1 ... 0 0.95 0... 0
2 ... 0 0.95 0.95... 0
Run Code Online (Sandbox Code Playgroud)
所以依此类推,基本上我想选择数据框的最后13列,并计算每行的数量大于某个值,然后将其附加到我的数据框.
我认为必须有一个简单的方法,我一直试图使用,df.iloc[:, 21:]因为我的第一列兴趣从这里开始,但从这一点开始,我感到卡住了.我一直在尝试许多不同的方法,比如criteriafor和for循环.我知道这是一件微不足道的事情,但我花了好几个小时.任何帮助将非常感激.
for x in df:
a = df.iloc[:,21:].values()
if a.any[:, 12] > 0.9:
a[x] = 1
else:
a[x] = 0
sumdi = sum(a)
df.append(sumdi)
Run Code Online (Sandbox Code Playgroud)
我相信您需要比较with ()13选择的最后一列,计算值和转换为整数:ilocgt>Truesum
df['new'] = df.iloc[:,-13:].gt(0.9).sum(axis=1).astype(int)
Run Code Online (Sandbox Code Playgroud)
样品:
np.random.seed(12)
df = pd.DataFrame(np.random.rand(10, 6))
#compare last 3 columns for > 0.5
df['new'] = df.iloc[:,-3:].gt(.5).sum(axis=1).astype(int)
print (df)
0 1 2 3 4 5 new
0 0.154163 0.740050 0.263315 0.533739 0.014575 0.918747 2
1 0.900715 0.033421 0.956949 0.137209 0.283828 0.606083 1
2 0.944225 0.852736 0.002259 0.521226 0.552038 0.485377 2
3 0.768134 0.160717 0.764560 0.020810 0.135210 0.116273 0
4 0.309898 0.671453 0.471230 0.816168 0.289587 0.733126 2
5 0.702622 0.327569 0.334648 0.978058 0.624582 0.950314 3
6 0.767476 0.825009 0.406640 0.451308 0.400632 0.995138 1
7 0.177564 0.962597 0.419250 0.424052 0.463149 0.373723 0
8 0.465508 0.035168 0.084273 0.732521 0.636200 0.027908 2
9 0.300170 0.220853 0.055020 0.523246 0.416370 0.048219 1
Run Code Online (Sandbox Code Playgroud)
使用apply很慢,因为引擎盖下有循环:
np.random.seed(12)
df = pd.DataFrame(np.random.rand(10000, 20))
In [172]: %timeit df['new'] = df.iloc[:,-13:].gt(0.9).sum(axis=1).astype(int)
3.46 ms ± 91.3 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [173]: %timeit df['new'] = df[df.columns[-13:]].apply(lambda x: x > .9, axis=1).sum(axis=1)
1.57 s ± 5.26 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Run Code Online (Sandbox Code Playgroud)