这是我的问题的简化版本。 我有一个DataFrame,它具有行程的起点和终点。 我想最终得到一个适用于每个站的DataFrame 到达和离开的次数。
我熟悉类似MapReduce的工作流程 映射阶段I可以占用一行并输出多行, 然后聚合在reduce阶段的所有行。
这是我现在的代码,它不起作用。
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')
非常感谢。
答案 0 :(得分:0)
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