用其他数据框的值高效地替换Pandas数据框中的值。

3

以下有三组数据框架的代码:

dataset = {
        'X1': [18, 70, 70, 65, 18],
        'X2': [1, 2, 2, 2, 1],
        'X3': [45, 55, 22, 31, 23],
        'X4': [1, 2, 1, 1, 2],
        'X5': [65, 80, 500, 200, 100]}

df = pd.DataFrame(dataset)


dataset1 = {
        'Variable': ['X1', 'X2', 'X3', 'X4', 'X5'],
        'Label': ['Age', 'Sex', 'Ethnicity', 'Education', 'Income']}

df_labels = pd.DataFrame(dataset1)


dataset2 = {
        'Variable': ['X1', 'X1', 'X1', 'X4', 'X4', 'X2', 'X2', 'X5', 'X5'],
        'Code': [18, 70, 65, 1, 2, 1, 2, 65, 80],
        'Value': ['18-24', '70-90', '65-80', 'Degree', 'Masters', 'Male', 'Female', '65K', '80K'] }

df_values = pd.DataFrame(dataset2)

df

enter image description here

df_labels

enter image description here

df_values

enter image description here

我编写了以下代码,使用df_values表格中的值来替换df数据框中的值。

df["X1"].replace({18: "18-24", 70: "70-90", 65: "65-80"}, inplace=True)
df["X2"].replace({1: "Male", 2: "Female"}, inplace=True)
df["X4"].replace({1: "Degree", 2: "Masters"}, inplace=True)
df["X5"].replace({65: "65K", 80: "80K"}, inplace=True)

这导致了以下数据框:

enter image description here

这种替换很简单,因为只有几个变量的4组替换。然而,该数据集包含近100个变量。是否有更简单的方法使用df_values表替换所有值(针对所有100个变量)?
2个回答

3

在将替换的数据框架旋转后,让我们尝试使用replace

df.replace(df_values.pivot(*df_values).T)

      X1      X2  X3       X4   X5
0  18-24    Male  45   Degree  65K
1  70-90  Female  55  Masters  80K
2  70-90  Female  22   Degree  500
3  65-80  Female  31   Degree  200
4  18-24    Male  23  Masters  100

谢谢分享这个,我也会尝试这一步。 - Dinesh

2

这个想法是通过列名创建嵌套字典,然后使用DataFrame.replace方法:

d = (df_values.groupby('Variable')
              .apply(lambda x: x.set_index('Code')['Value'].to_dict())
              .to_dict())

df = df.replace(d)
print (df)
      X1      X2  X3       X4   X5
0  18-24    Male  45   Degree  65K
1  70-90  Female  55  Masters  80K
2  70-90  Female  22   Degree  500
3  65-80  Female  31   Degree  200
4  18-24    Male  23  Masters  100

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接