Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从一列的每个单元格到另一列的每个单元格的一对多数据帧_Python_Pandas_Dataframe - Fatal编程技术网

Python 从一列的每个单元格到另一列的每个单元格的一对多数据帧

Python 从一列的每个单元格到另一列的每个单元格的一对多数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,一个由2列组成的简单数据框,我希望每个列中的内容能够合并或并排列出。例如: 似乎有一个简单的方法,但我无法回忆和检索它。我试过“爆炸”和“融化”,但都不起作用 import pandas as pd data = {'name': ["David","Mike","Kate"], 'info' : ["Department","Titile","Gender"]} df

一个由2列组成的简单数据框,我希望每个列中的内容能够合并或并排列出。例如:

似乎有一个简单的方法,但我无法回忆和检索它。我试过“爆炸”和“融化”,但都不起作用

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很乐意帮助这个人@马克很乐意帮助这个人!