我正在尝试遍历数据帧的字典。对于字典中的每个df,我尝试将两列添加到列表中,执行一些操作,然后将此列表添加到单独的主数据帧中。
我如何尝试访问字典的每个元素:
for k in range(len(dict_of_df)):
l = dict_of_df[['Name1', 'Name2']][k].to_list()
然后,我尝试从此列表中删除所有重复项,并将其余项的组合附加到主df的两个单独列中。
例如,从头开始给出以下数据框:
Name1 Name2 Color Size
Jim Bob R L
Sam Jim G S
Name1 & Name2
列将被发送到这样的列表:
l
Jim
Bob
Sam
Jim
删除重复项将离开:
l
Jim
Bob
Sam
并将这些项目的组合插入到主df中将产生:
Name1 Name2
Jim Bob
Jim Sam
Sam Bob
答案 0 :(得分:3)
您可以使用itertools.combinations
,一次使用两次。拼合名称列,然后删除重复项,再进行组合。
# pandas >= 0.24
from itertools import combinations
names = pd.Series(
df[['Name1', 'Name2']].to_numpy().ravel()).drop_duplicates()
pd.DataFrame(combinations(names, 2), columns=['name1', 'name2'])
name1 name2
0 Jim Bob
1 Jim Sam
2 Bob Sam
# pandas < 0.24
# .to_numpy() -> .values
# combinations(...) -> list(combinations(...)) # iterators not supported
names = pd.Series(df[['Name1', 'Name2']].values.ravel()).drop_duplicates()
pd.DataFrame([*combinations(names, 2)], columns=['name1', 'name2'])
name1 name2
0 Jim Bob
1 Jim Sam
2 Bob Sam