如何在Python和Pandas中使用for循环创建许多过滤的数据帧?

时间:2018-01-30 12:31:32

标签: python pandas

我发现自己不得不创建数据帧,这些数据帧经常是更大数据帧的过滤器,我想知道是否有一种方法可以让Python为我做这个程序?

例如,我现在正在处理的数据集是应用版本数据,如下所示:

user_id | session_id | timestamp | time_seconds | app_version
 001    |   123      | 2014-01-01|    251       |     v1
 002    |   845      | 2014-01-01|    514       |     v1
 003    |   741      | 2014-01-02|    141       |     v1
 003    |   477      | 2014-01-03|    221       |     v2
 004    |   121      | 2014-01-03|    120       |     v2
 005    |   921      | 2014-01-04|    60        |     v3
...

我需要将不同的应用版本分开,以便每个版本都有自己的数据帧,目前我这样做:

v1 = all_data[all_data['app_version'] == 'v1']
v2 = all_data[all_data['app_version'] == 'v2']
v3 = all_data[all_data['app_version'] == 'v3']

这看起来非常重复,我可以写一个for循环来为我做这个吗?

1 个答案:

答案 0 :(得分:4)

我认为你需要创建dictionary of DataFrame s:

d = dict(tuple(df.groupby('app_version')))
print (d)
{'v2':    user_id  session_id   timestamp  time_seconds app_version
3        3         477  2014-01-03           221          v2
4        4         121  2014-01-03           120          v2, 
'v3':    user_id  session_id   timestamp  time_seconds app_version
5        5         921  2014-01-04            60          v3, 
'v1':    user_id  session_id   timestamp  time_seconds app_version
0        1         123  2014-01-01           251          v1
1        2         845  2014-01-01           514          v1
2        3         741  2014-01-02           141          v1}

print (d['v1'])
   user_id  session_id   timestamp  time_seconds app_version
0        1         123  2014-01-01           251          v1
1        2         845  2014-01-01           514          v1
2        3         741  2014-01-02           141          v1

print (type(d['v1']))
<class 'pandas.core.frame.DataFrame'>