【问题标题】:Transform(many row -> one row) dataframe as variables (pandas)将(多行 -> 一行)数据帧转换为变量(熊猫)
【发布时间】:2020-10-03 05:48:04
【问题描述】:

我有很多行的数据框。

我怎样才能使上面的数据框如下所示,其中只有一行。

import pandas as pd 

# source dataframe
df_source = pd.DataFrame({
    'ID': ['A01', 'A01'],
    'Code': ['101', '102'],
    'amount for code': [10000, 20000],
    'count for code': [4, 3]
})

# target dataframe
df_target = pd.DataFrame({
    'ID': ['A01'],
    'Code101': [1],
    'Code102': [1],
    'Code103': [0],
    'amount for code101': [10000],
    'count for code101': [4],
    'amount for code102': [20000],
    'count for code102': [3],
    'amount for code103': [None],
    'count for code103': [None],
    'count for code': [None],
    'sum of amount': [30000],
    'sum of count': [7]
})

我尝试使用方法 'get.dummies' 但它只能用于是否存在该代码。

如何处理数据框来制作我的数据集?

【问题讨论】:

  • 为您的数据框添加了代码。请检查结构。
  • 你只有代码 101,102,103 吗?

标签: python pandas dataframe row one-hot-encoding


【解决方案1】:

您可以遍历现有数据框的行并填充(使用 .at 或 .loc)您的新数据框 (df2)。 df2 将具有索引 ID,该 ID 现在是唯一的。

import pandas as pd

df = pd.DataFrame({
    'ID': ['A01', 'A01'],
    'Code': ['101', '102'],
    'amount for code': [10000, 20000],
    'count for code': [4, 3]
})

df2 = pd.DataFrame()
for idx, row in df.iterrows():
    for col in df.columns: 
        if col !='ID' and col !='Code': 
                    df2.at[row['ID'],col+row['Code']]=row[col]
        

【讨论】:

    【解决方案2】:

    你可以使用pivot_table:

    df_result = df.pivot_table(index='ID', columns='Code', values=['amount for code', 'amount for code'])
    

    这将返回具有多级列索引的数据框,例如('101', 'amount for code') 然后您可以添加其他计算列,例如金额总和等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-06
      • 2014-01-04
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 2017-06-22
      • 2019-10-01
      相关资源
      最近更新 更多