适当的时间动态设置变量名称?

时间:2016-09-21 20:55:47

标签: python pandas dataframe

编辑:原来答案是强调“不”。但是,我仍然在努力用适当数量的条目填充列表。

我一直在为此搜索StackOverflow,我一直看到动态设置变量名称不是一个好的解决方案。但是,我想不出另一种方法。

我有一个[ {rabbit, {auth_backends, [{rabbit_auth_backend_ldap, rabbit_auth_backend_internal}, rabbit_auth_backend_internal]} }, {rabbitmq_auth_backend_ldap, [{servers, ["theserver.thedomain.com"]}, %% this works, but a password is still required {user_dn_pattern, "CN=${username},OU=theADgroup,OU=anothergroup,DC=thedomain,DC=dom"}, %% looks like this is required {other_bind, anon}, {use_ssl, false}, {port, 389}, {log, true} ]} ]. DataFrame创建(从excel读入),其中包含带有字符串标题和整数条目的列,以及一个包含数字的列(让我们称之为周)1到52顺序增加。我想要做的是创建单独的列表,每个列表以列标题命名,条目是出现所列整数的次数的周数。

对于几列来说这很简单,只需手动创建列表名称,但随着列数的增加,这可能会有点失控。

残暴的解释,这是我能想到的最好的。希望简化的例子能够澄清。

pandas

期望的输出:

week  str1    str2    str3   
1       8       2        5        
2       1       0        3    
3       2       1        1 

到目前为止我所拥有的:

str1_count = [1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 3] # eight 1's, one 2, and two 3's
str2_count = [1, 1, 3]                         # two 1's, one 3
str3_count = [1, 1, 1, 1, 1, 2, 2, 2, 3]       # five 1's, three 2's, one 3

1 个答案:

答案 0 :(得分:1)

那么,像这样?

import collections
import csv
import io

reader = csv.DictReader(io.StringIO('''
week,str1,str2,str3
1,8,2,5
2,1,0,3
3,2,1,1
'''.strip()))

data = collections.defaultdict(list)
for row in reader:
    for key in ('str1', 'str2', 'str3'):
        data[key].extend([row['week']]*int(row[key]))

from pprint import pprint
pprint(dict(data))

# Output:
{'str1': ['1', '1', '1', '1', '1', '1', '1', '1', '2', '3', '3'],
 'str2': ['1', '1', '3'],
 'str3': ['1', '1', '1', '1', '1', '2', '2', '2', '3']}

注意:Pandas适合处理数据并对其进行一些有趣的操作,但如果你只是需要一些简单的东西,你就不需要它。这是其中一种情况。