Как скрестить соединение 2 серии, чтобы сделать ее справочной таблицей в pandas? - PullRequest
0 голосов
/ 08 января 2020

Я пытаюсь создать справочную таблицу, содержащую перекрестное соединение идентификаторов и дат, и буду использовать эту таблицу в качестве таблицы левого соединения для выполнения всех операций. Пожалуйста, не могли бы вы посоветовать, как создать фрейм данных из 2 серий, выполнив кросс-соединение серий.

Я создал серию 1 как:

df1 = pd.Series(pd.date_range(start='1/1/2017', end='1/1/2019', freq='MS'))
df2 = pd.Series(["AN", "BN", "CN"])

Я хочу df, как:

id dt
AN 1-1-2017
AN 1-2-2017
..
BN 1-1-2017
BN 1-2-2017
..
CN 1-1-2017
CN 1-2-2017
and so on..

Ответы [ 2 ]

2 голосов
/ 08 января 2020

Использование itertools.product с конструктором DataFrame:

from  itertools import product
df = pd.DataFrame(list(product(df2, df1)), columns=['id','dt'])
#pandas 0.25+ list should be omit
#df = pd.DataFrame((product(df2, df1)), columns=['id','dt'])
print (df)
    id         dt
0   AN 2017-01-01
1   AN 2017-02-01
2   AN 2017-03-01
3   AN 2017-04-01
4   AN 2017-05-01
..  ..        ...
70  CN 2018-09-01
71  CN 2018-10-01
72  CN 2018-11-01
73  CN 2018-12-01
74  CN 2019-01-01

[75 rows x 2 columns]
0 голосов
/ 08 января 2020

Вот способ использования explode:

# convert series to dataframe
df3 = df1.reset_index().drop('index', 1)

# add a new row
df3['dt'] = [df2.values.tolist() for _ in range(df3.shape[0])]

# explode the new row
df3 = df3.explode('dt')
...