【问题标题】:How do I subset a pandas dataframe based on a list of column names如何根据列名列表对熊猫数据框进行子集化
【发布时间】:2022-11-18 03:44:54
【问题描述】:

我有一个包含 200 多列的客户端数据 df,例如 A、B、C、D...X、Y、Z。此 df 中有一列,其中包含 CAMPAIGN_ID。我有另一个数据 mapping_csv,它有 CAMPAIGN_ID 和我需要的来自 df 的一组列。我需要为每个活动将 df 拆分为一个 csv 文件,该文件将包含来自该活动的行,并且只有那些符合 mapping_csv 的列。 我收到如下类型错误。 类型错误:无法散列的类型:“列表” 这就是我尝试过的。

for campaign in df['CAMPAIGN_ID'].unique():
  df2 = df[df['CAMPAIGN_ID']==campaign]
  # remove blank columns
  df2.dropna(how='all', axis=1, inplace=True)
  for column in df2.columns:
    if df2[column].unique()[0]=="0000-00-00" and df2[column].unique().shape[0]==1:
      df2 = df2.drop(column, axis=1)
  for column in df2.columns:
    if df2[column].unique()[0]=='0' and df2[column].unique().shape[0]==1:
      df2 = df2.drop(column, axis=1)
  # select required columns
  df2 = df2[mapping_csv.loc[mapping_csv['CAMPAIGN_ID']==campaign, 'Variable_List'].str.replace(" ","").str.split(",")]
  file_shape = df2.shape[0]
  filename = "cart_"+str(dt.date.today().strftime('%Y%m%d'))+"_"+campaign+"_rowcnt_"+str(file_shape) 
  df2.to_csv(filename+".csv",index=False)

任何帮助将不胜感激。

这就是数据的样子 -

这就是映射的样子 -

【问题讨论】:

  • 请添加数据框的最小可重现示例

标签: python-3.x pandas dataframe split typeerror


【解决方案1】:

这解决了您的核心问题。

df = pd.DataFrame(dict(id=['foo','foo','bar','bar',],a=[1,2,3,4,], b=[5,6,7,8], c=[1,2,3,4]))
mapper = dict(foo=['a','b'], bar=['b','c'])

for each_id in df.id.unique():
    df_id = df.query(f'id.str.contains("{each_id}")').loc[:,mapper[each_id]]
    print(df_id)

【讨论】:

    猜你喜欢
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-29
    • 2013-04-14
    • 2013-08-15
    • 1970-01-01
    • 2021-02-03
    相关资源
    最近更新 更多