Python将值分组到两列中

Python将值分组到两列中,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,数据帧如下所示。这些名称分为5组,通过A列中的公用项链接 我想把名字分组。我试过: import pandas as pd data = {'A': ["James","James","James","Edward","Edward","Thomas","Thomas","Jason","Jason","Jason","Brian","Brian"], 'B' : ["John","Michael","William","David","Joseph","Christopher","Dani

数据帧如下所示。这些名称分为5组,通过A列中的公用项链接

我想把名字分组。我试过:

import pandas as pd

data = {'A': ["James","James","James","Edward","Edward","Thomas","Thomas","Jason","Jason","Jason","Brian","Brian"], 
'B' : ["John","Michael","William","David","Joseph","Christopher","Daniel","George","Kenneth","Steven","Ronald","Anthony"]}
df = pd.DataFrame(data)

df_1 = df.groupby('A')['B'].apply(list)
df_1 = df_1.to_frame().reset_index()

for index, row in df_1.iterrows():
    print (row['A'], row['B'])
这些产出是:

('Brian', ['Ronald', 'Anthony'])
('Edward', ['David', 'Joseph'])
('James', ['John', 'Michael', 'William'])
('Jason', ['George', 'Kenneth', 'Steven'])
('Thomas', ['Christopher', 'Daniel'])
但我希望每个组都有一个列表(如果有一种自动为每个列表分配变量的方法会更好),比如:

我尝试了
row['B'].append(row['A'])
但它返回
None

把他们分组的正确方法是什么?谢谢。你可以试试这个。使用

作为输出,您得到
None
的原因是
list。append
返回
None
它会在适当的位置改变列表。

您可以尝试此操作。使用


作为输出,您得到
None
的原因是
list。append
返回
None
它会在适当的位置对列表进行变异。

您可以在
中添加
分组列的值。name
属性:

s = df.groupby('A')['B'].apply(lambda x: [x.name] + list(x))
print (s)
A
Brian             [Brian, Ronald, Anthony]
Edward             [Edward, David, Joseph]
James      [James, John, Michael, William]
Jason     [Jason, George, Kenneth, Steven]
Thomas       [Thomas, Christopher, Daniel]
Name: B, dtype: object

您可以使用
属性在中添加
分组列的值

s = df.groupby('A')['B'].apply(lambda x: [x.name] + list(x))
print (s)
A
Brian             [Brian, Ronald, Anthony]
Edward             [Edward, David, Joseph]
James      [James, John, Michael, William]
Jason     [Jason, George, Kenneth, Steven]
Thomas       [Thomas, Christopher, Daniel]
Name: B, dtype: object
请尝试以下操作:

    import pandas as pd

    data = {'A': ["James","James","James","Edward","Edward","Thomas","Thomas","Jason","Jason","Jason","Brian","Brian"], 
    'B' : ["John","Michael","William","David","Joseph","Christopher","Daniel","George","Kenneth","Steven","Ronald","Anthony"]}
    df = pd.DataFrame(data)
    #display(df)
    df_1 = df.groupby(list('A'))['B'].apply(list)
    df_1 = df_1.to_frame().reset_index()

    for index, row in df_1.iterrows():
        ''' The value of  column A is not a list, 
so need to split the string and store in to a list and then concatenate with column B '''
        print(row['A'].split("delimiter") + row['B'])
输出:

['Brian', 'Ronald', 'Anthony']
['Edward', 'David', 'Joseph']
['James', 'John', 'Michael', 'William']
['Jason', 'George', 'Kenneth', 'Steven']
['Thomas', 'Christopher', 'Daniel']
请尝试以下操作:

    import pandas as pd

    data = {'A': ["James","James","James","Edward","Edward","Thomas","Thomas","Jason","Jason","Jason","Brian","Brian"], 
    'B' : ["John","Michael","William","David","Joseph","Christopher","Daniel","George","Kenneth","Steven","Ronald","Anthony"]}
    df = pd.DataFrame(data)
    #display(df)
    df_1 = df.groupby(list('A'))['B'].apply(list)
    df_1 = df_1.to_frame().reset_index()

    for index, row in df_1.iterrows():
        ''' The value of  column A is not a list, 
so need to split the string and store in to a list and then concatenate with column B '''
        print(row['A'].split("delimiter") + row['B'])
输出:

['Brian', 'Ronald', 'Anthony']
['Edward', 'David', 'Joseph']
['James', 'John', 'Michael', 'William']
['Jason', 'George', 'Kenneth', 'Steven']
['Thomas', 'Christopher', 'Daniel']

您能提供预期输出的示例吗?@Kyle,请参阅已编辑的问题。您能提供预期输出的示例吗?@Kyle,请参阅已编辑的问题。@MarkK很高兴,这很有帮助。;)你介意我把答案改成耶斯雷尔的吗?不,你应该接受他的答案这对社区会更有帮助。@MarkK很高兴,这很有帮助。;)你介意我把答案改成耶斯雷尔的吗?不,你应该接受他的答案这对社区会更有帮助。我想这就是OP想要的。我以为他只是想打印输出+1@jezrael,很高兴再次得到您的帮助,先生!这真是太好了!我想这就是OP想要的。我以为他只是想打印输出+1@jezrael,很高兴再次得到您的帮助,先生!这真是太好了!