Python 在groupby数据帧上获取不同的单词

Python 在groupby数据帧上获取不同的单词,python,pandas,group-by,Python,Pandas,Group By,如何根据另一列的group by获取列的不同单词 我需要得到每个可乐价值不同的可乐词 我的数据帧: colA colB US California City US San Jose ABC UK London 123 US California ZZZ UK Manchester UK London 所需数据帧(df): 编辑: 多亏了@jezrael,我才能够获得所需的数据帧 我有另一个数据帧(df2) 对于列(

如何根据另一列的group by获取列的不同单词

我需要得到每个可乐价值不同的可乐词

我的数据帧:

colA     colB
US       California City
US       San Jose ABC
UK       London 123
US       California ZZZ
UK       Manchester
UK       London
所需数据帧(df):

编辑:

多亏了@jezrael,我才能够获得所需的数据帧

我有另一个数据帧(df2)

对于列(colC)的每个值,我需要colB字符串与先前获得的数据帧的交集

所需:

ColC     n(df2_colBuniq)    n(df_df2_intersec_colB)
C1       2               2
C2       1               1
我尝试循环遍历每个唯一的colC值,但对于我拥有的大型数据帧,这需要花费相当长的时间。有什么建议吗?

使用:

  • 然后选择
    colB
  • 按空格到
    DataFrame
  • 通过对系列进行整形
  • 对于
    索引中的列


我们可以使用
get\u dummies

df.set_index('colA').colB.str.get_dummies(sep=' ').sum(level=0).replace(0,np.nan).stack().reset_index()
Out[13]: 
  colA     level_1    0
0   US         ABC  1.0
1   US  California  2.0
2   US        City  1.0
3   US        Jose  1.0
4   US         San  1.0
5   US         ZZZ  1.0
6   UK         123  1.0
7   UK      London  2.0
8   UK  Manchester  1.0

使用
df=df.drop_duplicates()
df=df.drop_duplicates(['col A','colB'])
使用df1=df.unique(),它将返回唯一值。@jezrael:我需要不同的字(用空格分隔)而不是不同的colB值。一开始我不是很清楚time@msksantosh-好的,所以重新打开并添加了解决方案。@jezrael:我在问题的编辑:下添加了后续内容。有什么建议吗?
ColC     n(df2_colBuniq)    n(df_df2_intersec_colB)
C1       2               2
C2       1               1
df = (df.set_index('colA')['colB']
        .str.split(expand=True)
        .stack()
        .reset_index(level=1, drop=True)
        .reset_index(name='colB')
        .drop_duplicates()
       )
print (df)
  colA        colB
0   US  California
1   US        City
2   US         San
3   US        Jose
4   US         ABC
5   UK      London
6   UK         123
8   US         ZZZ
9   UK  Manchester
df.set_index('colA').colB.str.get_dummies(sep=' ').sum(level=0).replace(0,np.nan).stack().reset_index()
Out[13]: 
  colA     level_1    0
0   US         ABC  1.0
1   US  California  2.0
2   US        City  1.0
3   US        Jose  1.0
4   US         San  1.0
5   US         ZZZ  1.0
6   UK         123  1.0
7   UK      London  2.0
8   UK  Manchester  1.0