我有一个pandas数据框,其中包含城市名称及其所属的州。我试图获得每个州的城市名称比较的所有可能组合。
示例数据框:
City State
----------
LosA Cali
SanJ Cali
SanF Cali
Char NC
Rale NC
预期答案:
City1 City2 State
----------
LosA SanJ Cali
LosA SanF Cali
SanJ SanF Cali
Char Rale NC
我使用了itertools的组合,它给出了整个组合,但有没有一种方法可以基于State实现?
答案 0 :(得分:2)
使用groupby
+ itertools.combinations
:
from itertools import combinations
g = df.groupby('State').apply(lambda x:
pd.Series(list(combinations(x.City, 2))))
df = pd.DataFrame(g.apply(list).tolist(), columns=['City1', 'City2'])
df['State'] = g.index.get_level_values(0)
df
City1 City2 State
0 LosA SanJ Cali
1 LosA SanF Cali
2 SanJ SanF Cali
3 Char Rale NC