我有一个看起来像这样的Pandas DataFrame:
From To
--------------------
DC Boston
DC Boston
Boston DC
Atlanta LA
LA Atlanta
我想创建一个看起来像这样的DataFrame:
City From To
-----------------------
DC 2 1
Boston 1 2
Atlanta 1 1
LA 1 1
每行在[发件人]和[发件人]列中包含城市的次数。
在Python中创建此类DataFrame的最干净方法是什么?
答案 0 :(得分:1)
value_counts
:
# use df[['From','To']].apply(...) if you have other columns
df.apply(lambda x: x.value_counts())
输出:
From To
Atlanta 1 1
Boston 1 2
DC 2 1
LA 1 1
更新:另一个选项,速度稍快:
df.stack().groupby(level=1).value_counts().unstack(0)
已测试:
%timeit -n 100 (df.apply(lambda x: x.value_counts()))
# 3.7 ms ± 71.7 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit -n 100 df.stack().groupby(level=1).value_counts().unstack(0)
# 2.98 ms ± 87.9 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)