我有两个数据框A
和B
:
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
但这不起作用。任何提示都会有很大帮助。
答案 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'])
而不是逐行。
此外,当然没有理由DataFrame
和A
需要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)