Python 如何从另一个数据帧展开数据帧中的值 例如,考虑两个数据帧A和B
数据帧A:Python 如何从另一个数据帧展开数据帧中的值 例如,考虑两个数据帧A和B,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,数据帧A: Name1 | Col1 | Col2 ------+------+----- A | 1 | 2 B | 4 | 3 C | 6 | 8 和数据帧B: Name2 | Col3 | Col4 ------+------+----- P | 5 | 9 Q | 0 | 1 R | 2 | 7 我想把它们转换成一个数据帧,就像 新数据帧: Name1 | Col1 | Col2 | Name
Name1 | Col1 | Col2
------+------+-----
A | 1 | 2
B | 4 | 3
C | 6 | 8
和数据帧B:
Name2 | Col3 | Col4
------+------+-----
P | 5 | 9
Q | 0 | 1
R | 2 | 7
我想把它们转换成一个数据帧,就像
新数据帧:
Name1 | Col1 | Col2 | Name2 | Col3 | Col4
------+------+------+-------+------+------
A | 1 | 2 | P | 5 | 9
A | 1 | 2 | Q | 0 | 1
A | 1 | 2 | R | 2 | 7
B | 4 | 3 | P | 5 | 9
B | 4 | 3 | Q | 0 | 1
B | 4 | 3 | R | 2 | 7
C | 6 | 8 | P | 5 | 9
C | 6 | 8 | Q | 0 | 1
C | 6 | 8 | R | 2 | 7
我怎样才能改变它
df1['key'] = 0
df2['key'] = 0
new_df = pd.merge(df1, df2, on='key').drop('key', axis=1)
print(new_df)
印刷品:
Name1 Col1 Col2 Name2 Col3 Col4
0 A 1 2 P 5 9
1 A 1 2 Q 0 1
2 A 1 2 R 2 7
3 B 4 3 P 5 9
4 B 4 3 Q 0 1
5 B 4 3 R 2 7
6 C 6 8 P 5 9
7 C 6 8 Q 0 1
8 C 6 8 R 2 7
你能做的就是这样
A2 = A.copy()
B2 = B.copy()
DUMMY = 'dummy'
A2[DUMMY] = 1
B2[DUMMY] = 1
df = pd.merge(A2,B2)
df = df.loc[:,df.columns != DUMMY]
它工作的原因是在公共“dummy”列上合并所有匹配值上的联接。假设dummy是常量,所有的组合都匹配。下面是一个使用numpy进行数据转换的答案,其基本思想是将
df1
中的行复制到df2
中的行
n_cols = df1.shape[1]
vals = [np.hstack([np.repeat(df1.iloc[i,:], n_cols).values.reshape(-1, n_cols), df2.values])
for i in range(len(df1))]
f = pd.DataFrame(np.vstack(vals), columns=df1.columns.tolist() + df2.columns.tolist())
print(f)
Name1 Col1 Col2 Name2 Col3 Col4
0 A A A P 5 9
1 1 1 1 Q 0 1
2 2 2 2 R 2 7
3 B B B P 5 9
4 4 4 4 Q 0 1
5 3 3 3 R 2 7
6 C C C P 5 9
7 6 6 6 Q 0 1
8 8 8 8 R 2 7
逻辑是什么?知道这一点会很有帮助。嗯,我需要做这件事来准备我正在为我的ML模型建立的数据@ShubhamSharma。但是为什么密钥只复制了三次,这里应该有一些逻辑?@ShubhamSharma这个名称实际上代表github提交哈希和文件。这很复杂,但正如我所说的,这一切都将用于ML ModelOHH笛卡尔产品!!!!这就是我要找的词。我想是的,这正是我想要的。谢谢你,伙计