我的数据框有一个字符串列,可以包含长字符串。我想获得一个唯一字符串列表,以及每个包含行索引的唯一字符串的列表。
我可以想到两种方法。
.unique()
获取唯一列表,然后迭代数据框以构建每个唯一值显示的索引列表.groupBy()
创建组并获取每组中的行索引列表但我不太确定哪一个更有效(或者是否有其他方法可以更有效地完成此操作)。我考虑效率的原因是我想要统一的字段和groupBy是一个字符串字段,可能有很长的字符串!
谢谢!
答案 0 :(得分:3)
演示:
In [16]: df
Out[16]:
col
0 aaaa
1 bbbb
2 aaaa
3 aaaa
4 bbbb
5 cccc
In [17]: df.groupby('col').groups
Out[17]:
{'aaaa': Int64Index([0, 2, 3], dtype='int64'),
'bbbb': Int64Index([1, 4], dtype='int64'),
'cccc': Int64Index([5], dtype='int64')}
或作为DataFrame:
In [31]: pd.DataFrame([[k,v.values]
for k,v in df.groupby('col').groups.items()],
columns=['col','indices'])
Out[31]:
col indices
0 aaaa [0, 2, 3]
1 bbbb [1, 4]
2 cccc [5]
答案 1 :(得分:2)
假设您的DataFrame为df
且字符串列为string
,您可以使用此功能:
df.drop_duplicates('string')['string'].apply( \
lambda x: df[df['string'] == x].index.tolist())