这是我的问题的简化版本。我有一个DataFrame,它有行程的开始和结束位置。我想最终得到一个DataFrame,它为每个工作站都有到达和离开的人数。
我熟悉类似MapReduce的工作流,在映射阶段I可以取一行并输出多行,然后在减少阶段中聚集在所有行上。
这是我现在拥有的代码,它不起作用。
import pandas as pd
import numpy as np
def expand_row(row):
return pd.Series(
{ 'station': [row['start_station'], row['end_station']],
'departures': [1, 0],
'arrivals': [0, 1],
},
)
trips = pd.DataFrame({
'start_station': ['a', 'c'],
'end_station': ['b', 'a'],
})
expanded = df.apply(expand_row, axis=1)
aggregated = expanded.groupby('station').aggregate(np.sum)
我想要的最后一个DataFrame是
desired_df = pd.DataFrame({
'station': ['a', 'b', 'c'],
'departures': [1, 0, 1],
'arrivals': [1, 1, 0]
})
desired_df.index = desired_df.pop('station')
非常感谢。
import pandas as pd
trips = pd.DataFrame({
'start_station': ['a', 'c'],
'end_station': ['b', 'a'],
})
trips.apply(pd.value_counts).fillna(0)
结果是:
end_station start_station
a 1 1
b 1 0
c 0 1