Python 从一列的每个单元格到另一列的每个单元格的一对多数据帧
一个由2列组成的简单数据框,我希望每个列中的内容能够合并或并排列出。例如: 似乎有一个简单的方法,但我无法回忆和检索它。我试过“爆炸”和“融化”,但都不起作用Python 从一列的每个单元格到另一列的每个单元格的一对多数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,一个由2列组成的简单数据框,我希望每个列中的内容能够合并或并排列出。例如: 似乎有一个简单的方法,但我无法回忆和检索它。我试过“爆炸”和“融化”,但都不起作用 import pandas as pd data = {'name': ["David","Mike","Kate"], 'info' : ["Department","Titile","Gender"]} df
import pandas as pd
data = {'name': ["David","Mike","Kate"],
'info' : ["Department","Titile","Gender"]}
df = pd.DataFrame(data)
df = df.explode('name')
print (df)
我还可以尝试什么呢?您可以创建两个新列表,将值乘以总行数。一列应该对索引进行排序。然后,在数据帧中加入列表
c1 = [*pd.concat([df['name']]*df.shape[0])]
c2 = [*pd.concat([df['info']]*df.shape[0]).sort_index()]
df = pd.DataFrame(list(zip(c1,c2)), columns=['name', 'info']).sort_values('name').reset_index(drop=True)
df
Out[1]:
name info
0 David Department
1 David Titile
2 David Gender
3 Kate Department
4 Kate Titile
5 Kate Gender
6 Mike Department
7 Mike Titile
8 Mike Gender
Sammy给了我一个想法,使上述代码更加简洁:
c1 = pd.concat([df['name']]*df.shape[0], ignore_index=True)
c2 = pd.concat([df['info']]*df.shape[0]).reset_index(drop=True)
df = pd.concat([c1, c2], axis=1)
df
可以创建两个新列表,将值乘以总行数。一列应该对索引进行排序。然后,在数据帧中加入列表
c1 = [*pd.concat([df['name']]*df.shape[0])]
c2 = [*pd.concat([df['info']]*df.shape[0]).sort_index()]
df = pd.DataFrame(list(zip(c1,c2)), columns=['name', 'info']).sort_values('name').reset_index(drop=True)
df
Out[1]:
name info
0 David Department
1 David Titile
2 David Gender
3 Kate Department
4 Kate Titile
5 Kate Gender
6 Mike Department
7 Mike Titile
8 Mike Gender
Sammy给了我一个想法,使上述代码更加简洁:
c1 = pd.concat([df['name']]*df.shape[0], ignore_index=True)
c2 = pd.concat([df['info']]*df.shape[0]).reset_index(drop=True)
df = pd.concat([c1, c2], axis=1)
df
使用和构建系列并使用以下方法重新组合:
使用和构建系列并使用以下方法重新组合:
通过创建tmp列,可以在两个列上进行交叉连接:
通过创建tmp列,可以在两个列上进行交叉连接:
或者,可以从列表的角度考虑,使用婴儿编程语言:
import pandas as pd
data = {'name': ["David","Mike","Kate"],
'info' : ["Department","Titile","Gender"]}
df = pd.DataFrame(data)
names = df['name'].tolist()
all_info = df['info'].tolist()
for n in names:
for a in all_info:
print (n, a)
输出:
David Department
David Titile
David Gender
Mike Department
Mike Titile
Mike Gender
Kate Department
Kate Titile
Kate Gender
或者,可以从列表的角度考虑,使用婴儿编程语言:
import pandas as pd
data = {'name': ["David","Mike","Kate"],
'info' : ["Department","Titile","Gender"]}
df = pd.DataFrame(data)
names = df['name'].tolist()
all_info = df['info'].tolist()
for n in names:
for a in all_info:
print (n, a)
输出:
David Department
David Titile
David Gender
Mike Department
Mike Titile
Mike Gender
Kate Department
Kate Titile
Kate Gender
您的结果应该像图片的左边还是应该像图片的右边?@toRex,结果在右边:您的结果应该像图片的左边还是应该像图片的右边?@toRex,结果在右边:非常感谢。希望你不介意我选择另一个答案。@MarkK,一点也不介意。干杯,伙计,谢谢你。希望你不介意我选择另一个答案。@MarkK,一点也不介意。干杯,伙计。@MarkK很乐意帮助这个人@马克很乐意帮助这个人!