gpt4 book ai didi

python - 如何根据 groupby 的结果在 Pandas 数据框中生成所有值对

转载 作者:太空狗 更新时间:2023-10-29 22:14:47 25 4
gpt4 key购买 nike

我有一个 Pandas 数据框df:

ID     words
1 word1
1 word2
1 word3
2 word4
2 word5
3 word6
3 word7
3 word8
3 word9

我想生成另一个数据框来生成每组中的所有单词对。所以上面的结果是:

ID     wordA    wordB
1 word1 word2
1 word1 word3
1 word2 word3
2 word4 word5
3 word6 word7
3 word6 word8
3 word6 word9
3 word7 word8
3 word7 word9
3 word8 word9

我知道我可以使用 df.groupby['words'] 获取每个 ID 中的单词。

我也知道我可以用

iterable = ['word1','word2','word3']
list(itertools.combinations(iterable, 2))

获取所有可能的成对组合。但是,对于生成如上所示的结果数据框的最佳方法,我有点迷茫。

最佳答案

它在应用和堆栈中简单使用 itertools 组合,即

from itertools import combinations
ndf = df.groupby('ID')['words'].apply(lambda x : list(combinations(x.values,2)))
.apply(pd.Series).stack().reset_index(level=0,name='words')

ID words
0 1 (word1, word2)
1 1 (word1, word3)
2 1 (word2, word3)
0 2 (word4, word5)
0 3 (word6, word7)
1 3 (word6, word8)
2 3 (word6, word9)
3 3 (word7, word8)
4 3 (word7, word9)
5 3 (word8, word9)

为了进一步匹配您的精确输出,我们必须做

sdf = pd.concat([ndf['ID'],ndf['words'].apply(pd.Series)],1).set_axis(['ID','WordsA','WordsB'],1,inplace=False)

ID WordsA WordsB
0 1 word1 word2
1 1 word1 word3
2 1 word2 word3
0 2 word4 word5
0 3 word6 word7
1 3 word6 word8
2 3 word6 word9
3 3 word7 word8
4 3 word7 word9
5 3 word8 word9

要将它转换为一行,我们可以这样做:

combo = df.groupby('ID')['words'].apply(combinations,2)\
.apply(list).apply(pd.Series)\
.stack().apply(pd.Series)\
.set_axis(['WordsA','WordsB'],1,inplace=False)\
.reset_index(level=0)

关于python - 如何根据 groupby 的结果在 Pandas 数据框中生成所有值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47618888/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com