【问题标题】:Adding a new column to dataframe based on values of another dataframe根据另一个数据框的值向数据框添加新列
【发布时间】:2018-12-29 11:23:02
【问题描述】:

我有两个 python 数据框 df1 和 df2。 df2 具有 A、B、C 列。 df1 具有 A、B、D 列,其中 A 和 B 中的值对可能重复。

我想添加一个新列 C 以便它从 df2 获取值。 例如: df2 具有以下条目:[ (1,2,0), (2,1,3), (3,4,10)] 和 df1 有条目 [(1,2,2), (1,2,5), (3,4,5), (1,2,7), (3,4,3)] 我想要的最终结果是 [(1,2,2,0), (1,2,5,0), (3,4,5,10), (1,2,7,0), (3, 4,3,10)]。 我用python写了以下代码

result = pd.merge(df1,df2,on=['A','B'])
result.head()

但结果是一个空的数据框。

【问题讨论】:

标签: python python-3.x pandas dataframe merge


【解决方案1】:

它不起作用,因为您在创建原始数据框时使用了元组。这将导致一列包含元组而不是列 A、B、C 和 D。下面是有效的代码:

import pandas as pd

data1 = [[1,2,2], [1,2,5], [3,4,5], [1,2,7], [3,4,3]]
data2 = [[1,2,0], [2,1,3], [3,4,10]] 

df1 = pd.DataFrame(data1, columns=['A', 'B', 'D'])
df2 = pd.DataFrame(data2, columns=['A', 'B', 'C'])

df = pd.merge(df1, df2, on=['A', 'B'])
#df['tuple'] = df.apply(lambda row: (row['A'], row['B'], row['C'], row['D']), axis=1)
df['tuple'] = list(zip(df.A, df.B, df.C, df.D))

df

输出是:

    A   B   D   C   tuple
0   1   2   2   0   (1, 2, 0, 2)
1   1   2   5   0   (1, 2, 0, 5)
2   1   2   7   0   (1, 2, 0, 7)
3   3   4   5   10  (3, 4, 10, 5)
4   3   4   3   10  (3, 4, 10, 3)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多