我有一个熊猫数据帧结构如下:
col1 col2
A C1.123
A C1.123.89
B D0.3
B E98
col2表示树结构数据,例如C1.123.89
是C1.123
的子节点。请注意,col2条目的深度可以达到11级,例如D09.123.908.90.12.123.982.321.23.12
可以在here中找到一个小数据集。你知道吗
我想“挤压”上面的数据帧,以便每个col1组只包含最深的节点(父节点被移除)。所以,我希望输出
col1 col2
A C1.123.89
B D0.3
B E98
到目前为止,我都是这样处理的
def has_children(df, col):
all_vals = df[col].tolist()
return df[col].map(lambda x: any([x+'.' in l for l in all_vals]))
for col1, group in merge.groupby('col1'):
merge.loc[merge.col1==col1,'has_children'] = has_children(group, 'col2')
我的封套后面的计算表明,这应该需要大约6小时来运行我的百万行左右。有没有更有效的方法?你知道吗
如果没有数据集的完整树级别,我不确定这是否更快。它本质上只是查看哪些子字符串对于
col1
中的每个单独的值都是自身的子集。你知道吗相关问题 更多 >
编程相关推荐