基于它所属的组的pandas列的所有排列和组合

时间:2017-11-07 10:14:52

标签: python combinations permutation itertools

我有一个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实现?

1 个答案:

答案 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
相关问题