我有一个看起来像这样的数据集:
my_dict = {'my_var': {0: u'000000',
1: u'100000',
2: u'000000',
3: u'000000',
4: u'000000',
5: u'010000',
6: u'000100',
7: u'110100',
8: u'110101',
9: u'000000',
10: u'010000',
11: u'000100',
12: u'000100',
13: u'000100',
14: u'011101',
15: u'000000',
16: u'111110',
17: u'001010',
18: u'011111',
19: u'111111'},
'id': {0: u'115',
1: u'143',
2: u'155',
3: u'129',
4: u'003',
5: u'100',
6: u'102',
7: u'004',
8: u'889',
9: u'349',
10: u'772',
11: u'759',
12: u'346',
13: u'340',
14: u'541',
15: u'924',
16: u'234',
17: u'661',
18: u'965',
19: u'779'}}
我想计算每种情况下1的出现,以便最终输出是每个id为1的数量。在最终输出中,id 115为零,而id 143为1。
我有一个想法,将字符串分成六列,然后进行汇总,但这听起来效率很低,但我没有实现它。
总是感谢您的帮助。
答案 0 :(得分:1)
使用DataFrame.assign
,Series.str.count
和groupby.sum
:
df.assign(ones=df['my_var'].str.count('1')).groupby('id', sort=False).sum().reset_index()
id ones
0 115 0
1 143 1
2 155 0
3 129 0
4 003 0
5 100 1
6 102 1
7 004 3
8 889 4
9 349 0
10 772 1
11 759 1
12 346 1
13 340 1
14 541 4
15 924 0
16 234 5
17 661 2
18 965 5
19 779 6
我假设my_var
列是string
类型,如果不是,请替换:
df['my_var'].str.count('1')
使用
df['my_var'].astype(str).str.count('1')
答案 1 :(得分:1)
据我了解,id
在每一行中都是唯一的。如果是这样,您可以使用简单的str.count
:
df['num_1'] = df['my_var'].transform(lambda x: x.count('1'))
print(df)
打印:
my_var id num_1
0 000000 115 0
1 100000 143 1
2 000000 155 0
3 000000 129 0
4 000000 003 0
5 010000 100 1
6 000100 102 1
7 110100 004 3
8 110101 889 4
9 000000 349 0
10 010000 772 1
11 000100 759 1
12 000100 346 1
13 000100 340 1
14 011101 541 4
15 000000 924 0
16 111110 234 5
17 001010 661 2
18 011111 965 5
19 111111 779 6