Python 分组和缩减数据帧
我对Python很陌生,对Pandas也很陌生(我学习Pandas比Python更困难) 我试图转换一个大数据集,但我被卡住了Python 分组和缩减数据帧,python,numpy,pandas,Python,Numpy,Pandas,我对Python很陌生,对Pandas也很陌生(我学习Pandas比Python更困难) 我试图转换一个大数据集,但我被卡住了 我从具有以下结构的CSV上传数据 DATE ID CATEGORY 1 SUCCESS (0 or 1) 1/1/2015 a1 x 0 1/1/2015 a2 y 0 1/1/2015 a3 z 0 1/3/20
DATE ID CATEGORY 1 SUCCESS (0 or 1)
1/1/2015 a1 x 0
1/1/2015 a2 y 0
1/1/2015 a3 z 0
1/3/2015 a2 z 0
1/5/2015 a1 x 0
1/7/2015 a2 z 1
1/9/2015 a3 y 0
1/10/2015 a2 z 1
1/11/2015 a3 y 0
{a2: {'1':((y,z,z),(0,2,4)), '2':((z),(0))}
我不确定熊猫或NumPy的多维数组是否更适合这项任务。我也不确定要在熊猫身上发挥什么样的作用才能实现这一点
正确的方向上的一点会非常有帮助。我不是100%理解这个问题。 我不确定(0,2,4)是什么意思。 好的,让我们开始吧 这是一种非熊猫式的方式,与所有的数据帧循环有关 我将您的数据保存在csv中,请按如下方式加载:
import pandas as pd
import numpy as np
df = pd.read_csv('data.csv')
print df.head(len(df))
看起来:
DATE ID CATEGORY SUCCESS
0 1/1/2015 a1 x 0
1 1/1/2015 a2 y 0
2 1/1/2015 a3 z 0
3 1/3/2015 a2 z 0
4 1/5/2015 a1 x 0
5 1/7/2015 a2 z 1
6 1/9/2015 a3 y 0
7 1/10/2015 a2 z 1
8 1/11/2015 a3 y 0
现在是代码:
uber_dict = {}
grouped = df.groupby(['ID'])
for name, group in grouped:
mini_dict = {}
working_list = []
i = 1
for idx,row in group.iterrows():
working_list.append((row['CATEGORY'],row['DATE']))
if row['SUCCESS'] == 1:
df = pd.DataFrame(working_list,columns= ['CATEGORY','DATE']) # let's use a bit more pandas.
df.set_index('CATEGORY',inplace=True)
df["DATE"] = pd.to_datetime(df["DATE"]) # my dates are string format so casting
df['DATE'] = df['DATE'].diff()
df['DATE'].fillna(0,inplace=True)
df['DATE'] = df['DATE'].astype('timedelta64[D]').astype('int')
mini_dict[str(i)] = tuple(zip(*df.to_records()))
working_list=[]
i = i +1
if mini_dict.keys(): # see http://stackoverflow.com/questions/53513/best-way-to-check-if-a-list-is-empty
uber_dict[name] = mini_dict
print uber_dict
产生
{'a2': {'1': (('y', 'z', 'z'), (0, 2, 4)), '2': (('z',), (0,))}}
哇,成功了。为了澄清,第二个数组是时间增量。我更新了您的代码,从唯一ID的第一个实例开始给出日增量,然后在成功后重置。谢谢真正的数据文件相当大,所以我必须找出如何将其放入内存中。但这太棒了,我现在有了一个继续学习的方向。