如何在Python中没有公共密钥的情况下组合两个数据帧

时间:2016-10-27 17:14:00

标签: python dataframe merge

我有两个数据框AB

A= Date 2016-01 2016-02 2016-03 2016-04 2016-05

B= Titles Manager Direcotr Associates

我想要一个大小为20x2的数据帧,如下所示:

AB= Date Title 2016-01 Manager 2016-02 Manager 2016-03 Manager ... 2016-04 Associates 2016-05 Associates

这就是我的尝试:

columns = ['Date','Title']
b = pd.DataFrame(columns=columns)

for i in A.Date:
    for j in B.Title:
        b.Date = i
        b.Title = j

但这不起作用。任何提示都会有很大帮助。

3 个答案:

答案 0 :(得分:1)

我第一次尝试了大熊猫,但也许这就是你要找的答案:

from itertools import product
import pandas as pd

df1 = pd.DataFrame({'Dates': ['Date0', 'Date1', 'Date2', 'Date3']},
                   index=[0, 1, 2, 3])

df2 = pd.DataFrame({'Titles': ['Manager', 'Director', 'Associates']},
                   index=[0, 1, 2])

columns = columns = ['Date','Title']
result = pd.DataFrame(columns=columns)

prod = product(df1.values, df2.values)
for index, i in enumerate(prod):
    result.loc[index] = [i[0][0], i[1][0]]

这给了我输出

    Date    Title
0   Date0   Manager
1   Date0   Director
2   Date0   Associates
3   Date1   Manager
4   Date1   Director
5   Date1   Associates
6   Date2   Manager
7   Date2   Director
8   Date2   Associates
9   Date3   Manager
10  Date3   Director
11  Date3   Associates

答案 1 :(得分:1)

Kiran的答案稍微简单一点:

/dev/random

我们只想要一个值的一维列表传递给from itertools import product import pandas as pd df1 = pd.DataFrame({'Dates': ['Date0', 'Date1', 'Date2', 'Date3']}) df2 = pd.DataFrame({'Titles': ['Manager', 'Director', 'Associates']}) ,而product会给我们一个二维数组

.values

我们可以直接从这个

构建prod = product(df1['Dates'], df2['Titles'])
DataFrame

通常首选(并且更快)从列表构建整个pd.DataFrame(list(prod),columns=['Date','Title']) 而不是逐行。

此外,当然没有理由DataFrameA需要DataFrames。如果他们列出了B个对象,那么代码就会更简单。

答案 2 :(得分:1)

尝试一下:

    import pandas as pd  
    
    df1 = pd.DataFrame({'Dates': ['Date0', 'Date1', 'Date2', 'Date3']})

    df2 = pd.DataFrame({'Titles': ['Manager', 'Director', 'Associates']})

    result = pd.concat([df1, df2],axis = 1, join = 'outer', ignore_index=False, sort=False)