如何从另一个数据框中扩展数据框中的值[重复]

Posted

技术标签:

【中文标题】如何从另一个数据框中扩展数据框中的值[重复]【英文标题】:How to expand values in a dataframe from another dataframe [duplicate] 【发布时间】:2020-10-10 18:32:43 【问题描述】:

例如,考虑两个数据帧 A 和 B

数据框 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

我怎样才能改变它?

【问题讨论】:

这是什么逻辑?知道这会很有帮助。 嗯,我需要做这件事来准备我为我的 ML 模型 @ShubhamSharma 建立的数据。 但是为什么key只复制了3次,这里应该有一些逻辑吧? @ShubhamSharma 这个名字实际上代表了 github 提交哈希和文件。这很复杂,但正如我所说,这一切都将用于 ML 模型 哦,笛卡尔积!!!这就是我要找的词。我想是的,这正是我想要的。谢谢人 【参考方案1】:
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

【讨论】:

【参考方案2】:

你可以做的是这样的

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 是常数,所有的组合都匹配。

【讨论】:

【参考方案3】:

这是一个使用 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

【讨论】:

以上是关于如何从另一个数据框中扩展数据框中的值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

检查使用jquery选择文本框中的值[重复]

Spark基于其他数据框中的列对数据框中的列进行重复数据删除

将数据框中的值列表附加到新列[重复]

线图:x轴值与数据框中的值不完全相同[重复]

如何在 Scala/Spark 的数据框中扩展数组 [重复]

如何在每个组中估算熊猫数据框中的一列[重复]