我的数据集如下所示:
Name | Country
---------------
Alex | USA
Tony | DEU
Alex | GBR
Alex | USA
我试着把这样的东西弄出来,基本上是分组和计数:
Name | Country
---------------
Alex | {USA:2,GBR:1}
Tony | {DEU:1}
下面是我的代码,它确实适用于较小的df,但在较大的df上却需要很长时间(我的代码大约有1400万行)。我也使用多处理模块来加速,但没有多大帮助:
def countNames(x):
return dict(Counter(x))
def aggregate(df_full,nameList):
df_list = []
for q in nameList:
df = df_full[df_full['Name']==q]
df_list.append(df.groupby('Name')['Country'].apply(lambda x: str(countNames(x))).to_frame().reset_index())
return pd.concat(df_list)
df = pd.DataFrame({'Name':['Alex','Tony','Alex','Alex'],
'Country':['USA','GBR','USA','DEU']})[['Name','Country']]
aggregate(df,df.Name.unique())
有没有什么可以加速内部逻辑(除了运行多处理)?你知道吗
这基本上是一个交叉表。您所说的“类似于此”意味着您不太确定输出应该是什么。你知道吗
选项1
分组依据和
value_counts
要获取指定的输出:
选项2
不过,我更喜欢这些陈述。我们可以在the answer to question # 9 in this answer中看到很多方法
对于O(n)复杂性解决方案,使用^{} 。你知道吗
字典结果
然后,您可以通过^{} 获得名称->;国家/地区词典映射。我不会把字典放在
pandas
数据框中,它不是为这个目的而设计的。你知道吗数据帧结果
出于显示目的,可以直接从
defaultdict
构建数据帧:你在找这个吗?你知道吗
退货:
相关问题 更多 >
编程相关推荐