Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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 如何从另一个数据帧展开数据帧中的值 例如,考虑两个数据帧A和B_Python_Python 3.x_Pandas_Dataframe - Fatal编程技术网

Python 如何从另一个数据帧展开数据帧中的值 例如,考虑两个数据帧A和B

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

数据帧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 | 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笛卡尔产品!!!!这就是我要找的词。我想是的,这正是我想要的。谢谢你,伙计