我试图从Excel文件中找到一个列(这里是字母列)中的唯一组。数据看起来像这样:
| 身份证|字母|
| - ------|- ------|
| 1个|A、B、D、E、F|
| 三个|B、C类|
| 第二章|B|
| 七十五|T型|
| 五十四|K、M|
| 九|D、B|
| 二十三|B、D、A|
| 三十四|X、Y、Z|
| 六十七|X、Y|
| 十二|E、D|
| 十五|G级|
| 十个|G级|
| 十一|F级|
一个组的任何元素都不应该出现在另一个组的元素中。根据上表,输出文件应该如下所示:
| 身份证|字母|
| - ------|- ------|
| 七十五|T型|
| 五十四|K、M|
因为这些组的任何元素都没有与其他组共享。
我尝试的代码:
df: pd.DataFrame = pd.DataFrame([
["A, B, D, E, F"], ["B, C"], ["B"], ["T"], ["K, M"], ["D, B"], ["B, D, A"], ["X, Y, Z"], ["X, Y"],
["E, D"], ["G"], ["G"]], columns=["letters"])
if __name__ == "__main__":
sub_ids=[]
for i in range(len(df)):
temp_sub_ids = []
curr_letters_i = df.iloc[i]["letters"].replace(" ", "").split(",")
for j in range(len(df)):
if i == j:
continue
curr_letters_j = df.iloc[j]["letters"].replace(" ", "").split(",")
if not any([letter in curr_letters_i for letter in curr_letters_j]):
temp_sub_ids.append(f"{df.iloc[j]['id']}")
sub_ids.append(",".join(temp_sub_ids))
df["sub-ids"] = sub_ids
print(df)
有了这个代码,它给每个身份证作为子身份证,没有任何共享的信件。但我想搜索所有信件组,如果没有任何共享信件与其他组,那么它将是唯一的。
2条答案
按热度按时间zzlelutf1#
算法:
letter
列来附加辅助列letter_
,所述正则表达式分隔符具有作为值/元素列表的每个组letter_
,以便将每个值放置在单独的行中letter_
值Map到其频率(其出现次数)letter
(初始组),仅包含出现一次的项目(最大计数为1
)ubbxdtey2#
要从your previous question继续my answer,我只需要向 Dataframe 添加一个简单的唯一性测试作为新列:
这就产生了
可以过滤(
print(df.loc[df["unicity"] == True]
)为