Python将值分组到两列中
数据帧如下所示。这些名称分为5组,通过A列中的公用项链接 我想把名字分组。我试过: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
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,很高兴再次得到您的帮助,先生!这真是太好了!