Python 如何在数据帧的同一列上的不同行的集合之间执行联合

Python 如何在数据帧的同一列上的不同行的集合之间执行联合,python,dataframe,set,Python,Dataframe,Set,这是在数据帧的同一列中不同行的集合之间执行并集的最佳方式(最快) 例如,对于以下数据帧: df_input=pd.DataFrame([[1,{1,2,3}],[1,{11,12}],[2,{1111,2222}],[2,{0,99}]], columns=['name', 'set']) name set 0 1 {1, 2, 3} 1 1 {11, 12} 2 2 {2222, 1111} 3 2

这是在数据帧的同一列中不同行的集合之间执行并集的最佳方式(最快)

例如,对于以下数据帧:

df_input=pd.DataFrame([[1,{1,2,3}],[1,{11,12}],[2,{1111,2222}],[2,{0,99}]], columns=['name', 'set'])

    name          set
0      1     {1, 2, 3}
1      1      {11, 12}
2      2  {2222, 1111}
3      2       {0, 99}
df_input=pd.DataFrame([[1,{1,2,3},{'a','b'}],[1,{11,12},{'j'}],[2,{1111,2222},{'m','n'}],[2,{0,99},{'p'}]], columns=['name', 'set1', 'set2'])
   name          set1    set2
0     1     {1, 2, 3}  {b, a}
1     1      {11, 12}     {j}
2     2  {2222, 1111}  {m, n}
3     2       {0, 99}     {p}
我想得到:

    name                  set
0      1    {1, 2, 3, 11, 12}
1      2  {0, 99, 2222, 1111}
如果我有两个不同集合的列,我如何连接这两个列

例如,对于此数据帧:

df_input=pd.DataFrame([[1,{1,2,3}],[1,{11,12}],[2,{1111,2222}],[2,{0,99}]], columns=['name', 'set'])

    name          set
0      1     {1, 2, 3}
1      1      {11, 12}
2      2  {2222, 1111}
3      2       {0, 99}
df_input=pd.DataFrame([[1,{1,2,3},{'a','b'}],[1,{11,12},{'j'}],[2,{1111,2222},{'m','n'}],[2,{0,99},{'p'}]], columns=['name', 'set1', 'set2'])
   name          set1    set2
0     1     {1, 2, 3}  {b, a}
1     1      {11, 12}     {j}
2     2  {2222, 1111}  {m, n}
3     2       {0, 99}     {p}
我正在寻找将此作为输出的方法:

   name                 set1       set2
0     1    {1, 2, 3, 11, 12}  {b, j, a}
1     2  {0, 99, 2222, 1111}  {m, p, n}

谢谢。

我对熊猫真的不是很了解,我相信有更好的方法,如果你有时间的话,你可能应该等一个更好的答案,但像这样的事情似乎能奏效

import pandas as pd
df_input=pd.DataFrame([[1,{1,2,3},{'a','b'}],[1,{11,12},{'j'}],[2,{1111,2222},{'m','n'}],[2,{0,99},{'p'}]], columns=['name', 'set1', 'set2'])

new = pd.DataFrame()
for name, agg_df in df_input.groupby('name'):
    data = {
        'name': name,
        'set1': set(),
        'set2': set(),
    }
    agg_df['set1'].apply(lambda c: data['set1'].update(c))
    agg_df['set2'].apply(lambda c: data['set2'].update(c))
    new = new.append(data, ignore_index=True)

print(new.head())
印刷品:

   name                 set1       set2
0   1.0    {1, 2, 3, 11, 12}  {b, j, a}
1   2.0  {0, 99, 2222, 1111}  {p, n, m}
你肯定可以使用更多的Python语法糖,但这并不是真的

import pandas as pd
df_input=pd.DataFrame([[1,{1,2,3},{'a','b'}],[1,{11,12},{'j'}],[2,{1111,2222},{'m','n'}],[2,{0,99},{'p'}]], columns=['name', 'set1', 'set2'])

SET_COLUMNS = ('set1', 'set2')
new = pd.DataFrame()
for name, agg_df in df_input.groupby('name'):
    data = {**{'name': name}, **{set_col: set() for set_col in SET_COLUMNS}}
    for set_col in SET_COLUMNS:
        agg_df[set_col].apply(lambda c: data[set_col].update(c))
    new = new.append(data, ignore_index=True)

print(new.head())