python-3.x 迭代 Dataframe 以填充另一个 Dataframe 中的计数

fafcakar  于 2022-12-15  发布在  Python
关注(0)|答案(1)|浏览(132)

我有一个交通流量数据集,它显示了一个城市内不同区域的多个行程的经纬点序列。

**数据:**包含以下列的行程数据:“行程ID”、“序列”、“区域”

pd.DataFrame({'TripID': ['Tom', 'Tom', 'Tom', 'Krish', 'Krish'], 'Sequence': [1, 2, 3, 1, 2], 'Zone': ['A', 'B', 'C', 'A', 'B']})

**输出:**我想推导出每个起点(O)和终点(D)区域之间的行程数。因此,输出 Dataframe 应包含每个O-D对之间的trip_counts。
输出步骤:

1.我首先用所有可能的区域对创建OD矩阵
一个月一个月一个月一个月一个月
我需要将trip_counts填充为这些对的 Dataframe 列,
1.这就是我需要帮助的地方输入 Dataframe (trip_flows)有多个唯一的行程(TripID)。每个唯一的行程从A区到B区到C区到D区再到E区。我需要将每个这样的行程对作为一个单独的行程进行计数,该序列位于“序列”属性中。因此,我们必须对每个“唯一的行程(TripID)组”进行迭代,并在识别行程对中的OD区时附加行程计数。
使用groupby,对于每个unique-trip(TripID),我生成了一个trip区域序列,然后在ODMatrix Dataframe 中为每对trip_counts设置0计数,并在每个trip后面添加+1。因此,最终的Output应该如下所示:

pd.DataFrame({'Origin': ['A', 'B'], 'Dest': ['B', 'C'], 'trip_count': [2, 1]})
lymnna71

lymnna711#

首先,创建一个唯一的TripID数组来迭代original_df,按照顺序处理分组的区域对。tripIDs=df['TripID'].unique()在数组项上循环以形成区域跳闸数组:

trips = []
for tripID in tripIDs:
    data = df[df["TripID"]==tripID]
    data=data.sort_values(by=["Sequence"])
    arr = data[['Zone']]
    df1=arr.drop(arr.tail(1).index)
    df1.reset_index(drop=True, inplace=True)
    df2=arr.drop(arr.head(1).index)
    df2.reset_index(drop=True, inplace=True)
    trip_pair = pd.DataFrame(columns=['ZPair'])
    trip_pair['ZPair']= df1['Zone']+df2['Zone']
    trips.append(trip_pair.to_numpy())

字符串
将循环的每个输出附加到trip_pair,并对唯一值计数:

all_trips=np.vstack(trips)
(unique, counts) = np.unique(all_trips, return_counts=True)
all_trips=np.array(list(zip(unique, counts)))
all_trips = pd.DataFrame(all_trips, columns = ['ZPair','counts'])

最后,将值计数数组转换为 Dataframe ,并将其与OD矩阵 Dataframe 连接。

OD=df_orig['Zone'].unique()
pairs =[(a, b) for a in OD for b in OD]
ODMatrix = pd.DataFrame(pairs, columns = ['Origin','Dest'])
ODMatrix['ZPair']=ODMatrix['Origin']+ODMatrix['Dest']
ODMatrix=ODMatrix.merge(all_trips,on='ZPair',how='left')
ODMatrix.fillna(0, inplace=True)
ODMatrix.head()

相关问题