这就是我的数据:
id date rt dnm
101122 2017-01-24 0.0 70
101122 2017-01-08 0.0 49
101122 2017-04-13 0.02976 67
101122 2017-08-03 1.02565 39
101122 2016-12-01 0.0 46
101122 2017-01-25 0.0 69
101122 2017-01-02 0.0 76
101122 2017-07-18 0.02631 38
101122 2016-06-02 0.0 120
221344 2016-10-21 0.00182 176
221344 2016-09-21 0.47732 194
221344 2016-06-23 0.0 169
221344 2017-10-10 0.91391 151
221344 2017-04-29 0.0 33
221344 2017-02-05 0.0 31
221344 2017-10-16 0.0 196
221344 2016-09-25 0.0 33
221344 2016-07-17 0.0 21
221344 2016-07-21 0.0 46
615695 2017-07-12 0.0 21
615695 2017-07-05 0.0 18
615695 2016-07-11 0.0 38
615695 2016-07-19 0.03655 29
615695 2017-05-27 0.0 23
615695 2017-12-22 0.0 20
615695 2017-04-25 0.0 34
615695 2017-03-23 0.0 20
615695 2016-09-23 0.0 25
615695 2016-06-18 0.0 25
我试图得到“dmn'”的总和。每个' id'的列并为此新列命名为' sum_values'。之后,我需要获得具有' sum_values'的ID。高于300.以下代码生成第一部分:
data = pd.read_csv(file_name, sep='\t', header=0,
parse_dates=[1], infer_datetime_format=True);
test = (data.assign(sum_values = data.groupby('id')['dnm'].transform(np.sum))
.query('sum_values > 300'))
这将添加一个名为' sum_values'的新列。并多次重复每个id的和值。我需要获得一个独特的“id'和' sum_values'柱。但我无法弄清楚如何/在哪里添加nunique()。
这是理想的结果:
id sum_values(>300)
101122 574
221344 1050
有什么想法吗?
答案 0 :(得分:5)
groupby
sum
d = df.groupby('id')['dnm'].sum()
<强> indexing
强>
d[d > 500]
id
101122 574
221344 1050
Name: dnm, dtype: int64
如果您想要输出中的列名,请使用d[d > 500].reset_index()
答案 1 :(得分:2)
这就是我解释你说的话
df.assign(sum_values=df.groupby('id').dnm.transform('sum')).query('sum_values > 300')
id date rt dnm sum_values
0 101122 2017-01-24 0.00000 70 574
1 101122 2017-01-08 0.00000 49 574
2 101122 2017-04-13 0.02976 67 574
3 101122 2017-08-03 1.02565 39 574
4 101122 2016-12-01 0.00000 46 574
5 101122 2017-01-25 0.00000 69 574
6 101122 2017-01-02 0.00000 76 574
7 101122 2017-07-18 0.02631 38 574
8 101122 2016-06-02 0.00000 120 574
9 221344 2016-10-21 0.00182 176 1050
10 221344 2016-09-21 0.47732 194 1050
11 221344 2016-06-23 0.00000 169 1050
12 221344 2017-10-10 0.91391 151 1050
13 221344 2017-04-29 0.00000 33 1050
14 221344 2017-02-05 0.00000 31 1050
15 221344 2017-10-16 0.00000 196 1050
16 221344 2016-09-25 0.00000 33 1050
17 221344 2016-07-17 0.00000 21 1050
18 221344 2016-07-21 0.00000 46 1050
这就是我获得理想结果的方式。
f, u = pd.factorize(df.id)
sums = np.bincount(f, df.dnm)
mask = sums > 300
pd.DataFrame(dict(
sum_values=sums[mask],
ID=u[mask]
))
ID sum_values
0 101122 574.0
1 221344 1050.0