计算出现在大熊猫字符串中的1的数量

时间:2020-01-09 22:02:59

标签: python string pandas

我有一个看起来像这样的数据集:

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。

我有一个想法,将字符串分成六列,然后进行汇总,但这听起来效率很低,但我没有实现它。

总是感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

使用DataFrame.assignSeries.str.countgroupby.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