我正在尝试对groupby的所有行进行操作。 基本上我有以下内容:
import pandas as pd
import numpy as np
def tdiff(dff):
# return(dff[dff.task.eq('d')].start - dff[dff.task.ne('d')].end)
return(dff[dff.task.eq('d')].start - dff.end)
a = []
p = 0
while p < 6:
i = 0
while i < 4:
a.insert(i,p)
i = i + 1
p = p + 1
d={'task':pd.Series(6*['a','b','c','d'],name='task'),
'jobid':pd.Series(a),
'start':pd.Series(np.random.randn(24)),
'end':pd.Series(np.random.randn(24))}
df = pd.DataFrame(d)
print(df)
dt = df.groupby('jobid').apply(tdiff)
dt.name='tdiff'
print(type(dt))
print(dt)
除了我在每组中有十几个不同的'任务'(a,b,c,d,.... z)。并非所有组都能保证除了任务“d”之外的所有任务都能得到保证。任务'd'旁边还有至少1个任务。
在每个groupby结果中,我希望区分所有其他任务的 d.start 和 end 。 我该怎么做?
我尝试了一个应用功能,似乎确实返回了一个系列。但是除了'd'之外,我得到了NaN。我想我不知道如何从每组中所有其他任务的“开始”值中减去d.end。
谢谢!
答案 0 :(得分:2)
df
从OP代码生成 end jobid start task
0 -1.223702 5 -0.458517 a
1 0.045843 5 -0.676103 b
2 -0.661233 5 1.213528 c
3 -0.339473 5 0.090109 d
4 2.474916 4 0.069272 a
5 0.562003 4 0.307962 b
6 0.286008 4 -0.045996 c
7 0.770700 4 1.053486 d
8 -0.948754 3 -0.173639 a
9 0.576441 3 -1.085345 b
10 0.098523 3 1.399861 c
11 0.983254 3 -0.976588 d
12 -0.286155 2 -0.542215 a
13 -1.959281 2 -0.436720 b
14 1.020525 2 1.050937 c
15 0.815528 2 2.173647 d
16 0.158771 1 -2.584689 a
17 0.239464 1 0.521442 b
18 0.463753 1 -0.919359 c
19 0.430110 1 -0.996819 d
20 0.084908 0 0.599807 a
21 0.615123 0 -1.563351 b
22 -0.027279 0 -0.755369 c
23 0.826941 0 2.228655 d
:
sub()
task a b c d
jobid
0 -2.143747 -1.613532 -2.255934 -1.401714
1 1.155591 1.236284 1.460572 1.426930
2 -2.459802 -4.132928 -1.153122 -1.358119
3 0.027834 1.553029 1.075111 1.959842
4 1.421430 -0.491483 -0.767478 -0.282786
5 -1.313812 -0.044266 -0.751343 -0.429582
的输出:
<section id="feature-courses" class="pt pt-sm-80 feature-section">
<div class="wow fadeInLeft container text-center">
<h2>Cursos de Inglés Destacados</h2>
<div class="spacer-60"></div>
<div class="row">
<?php echo do_shortcode("[slide-anything id="2320"]"); ?>
</div>
</div>
</section>