Python得到argparse,使用groupby对数据进行分组求和。

问题描述 投票:0回答:1

我有一个数据集是这样的,里面的数字是 NY, LACHI 列是人们访问这些城市的次数。

import pandas as pd
data = {'Person':['A','B','C','D','E','F'], 
    'NY':[1, 1, 0, 3, 0, 0],
    'LA':[0, 1, 1, 0, 1, 1],
    'CHI':[2, 0, 1, 0, 0, 1],
    'Gender':['F','F','F','M','M','NA'],
    'Citizenship':['US','Canada','US','US','Mexico','Canada'],
    'Age':['30s','30s','50s','NA','20s','30s']} 
df = pd.DataFrame(data) 

我将这些数据按不同的组别进行总结,定义为 Gender, CitizenshipAge. 我可以像下面这样做。

n_by_gender = df.groupby(['Gender']).sum()
n_by_citizenship = df.groupby(['Citizenship']).sum()
n_by_age = df.groupby(['Age']).sum()
pd.concat([df, n_by_gender, n_by_citizenship, n_by_age])

现在我想写一个 argparse 模块,可以做类似的事情。我想在其中加入两个参数,这样人们就可以选择他们希望数据由哪一组来汇总。(例如,如果人们输入 python modulename.py -Gender -Age,它将返回我上面产生的东西,除了按公民身份汇总访问次数的行。

import argparse

parser = argparse.ArgumentParser(description='Sum data by group')
parser.add_argument('-g', default = "Gender", type=str)  ### need to add some action here?
parser.add_argument('-c', default = "Citizenship", type=str)
args = parser.parse_args()

print(args.b_string)
print(args.c_string)

我一直在阅读 argparse 文档,而我不明白的是,每一个动作似乎都是添加在 parser.add_argument() 使用 action 类?我如何在 groupby().sum() 命令内的 parser.add_argument()还是说,这是个非常错误的理解。argparse 工作?

python argparse
1个回答
0
投票

听起来你是在试图检索来自 argparse 并将其传递到你的数据操作的功能中。如果是这样,下面是你的操作方法。

import argparse
parser = argparse.ArgumentParser(description='Sum data by group')
parser.add_argument("groupby1",default="Gender", type=str, help="groupby this column (case sensitive)")
parser.add_argument("groupby2",default="Citizenship", type=str, help="groupby this column (case sensitive)")

# Get your arguments
args = parser.parse_args()
groupby_1 = args.groupby1
groupby_2 = args.groupby2


# If they exist, perform your manipulation
all_agg = []
for g in [groupby1, groupby2]:
  if g:
    # Do it
    df_agg = df.groupby([g]).sum()
    all_agg.append(df_agg)

# This is not the best way to perform this aggregation
# but your question was focused on argparse so I'll skip over this part
df_agg = pd.concat(all_agg)

执行这个文件的步骤如下:

python3 my_file.py Gender Citizenship
© www.soinside.com 2019 - 2024. All rights reserved.