【问题标题】:Python pandas two data framesPython pandas 两个数据框
【发布时间】:2021-08-20 15:51:48
【问题描述】:

我有两个数据框,其中一个是 15 人 50 年的年龄,即 15 行 x 51 列。另一个有两列年龄和一个变量d。我想要第三个数据框,它为第一个数据框中的每个年龄提供 d 值,即它将像第一个 df 一样有 15 行和 51 列。我该怎么办?

【问题讨论】:

标签: python pandas


【解决方案1】:

您的数据的迷你示例:

data = {'person': ['a','b','c'],'age1':[10,11,12],'age2':[11,12,13]}
df1 = pd.DataFrame(data)
data = {'var_d': ['a1','a2','a3','a4','a5'],'age':[10,11,12,13,14]}
df2 = pd.DataFrame(data)

让我们从 df2 创建字典,将 var_d 值转换为年龄值:

age_to_var_dict = dict(zip(df2.age, df2.var_d))

现在让我们遍历 df1 年龄值并将它们转换为 var_d 值:

df3 = df1.copy(deep=True)
def convert_age_to_var_d(col):
    result = []
    for i,val in enumerate(col):
        result.append(age_to_var_dict[val])
    return result
df3.iloc[:,1:] = df1.iloc[:,1:].apply(convert_age_to_var_d)
# rename age columns to var_d
df3.columns = ['person','var_d1','var_d2']

我们得到了 df3 和每个年龄的人 var_d:

【讨论】:

  • 希望我对您的理解正确,下次请尝试插入您输入数据的样本、您迄今为止尝试过的代码以及人们已经在 cmets 中询问您的预期输出。跨度>
  • 嗨,我运行了这段代码,我用数值代替了 a1,a2,... 所以它运行正常,但所有值都显示为 0。所以如果我有一个值 0.000934,它会显示最多为 0。我该如何解决这个问题?
  • 我编辑了解决方案,现在它也适合您提到的情况。问题的原因是表列的 dtype。所以我创建了一个新列表并将其返回,而不是自己编辑列值。
猜你喜欢
  • 1970-01-01
  • 2020-05-20
  • 1970-01-01
  • 1970-01-01
  • 2015-04-22
  • 1970-01-01
  • 2017-07-11
  • 2018-08-29
  • 1970-01-01
相关资源
最近更新 更多