【发布时间】:2023-03-05 08:09:01
【问题描述】:
我正在使用 python3 和 pandas 创建一个脚本,它将:
- 在不同的数据集长度(行)和唯一值之间保持动态 - 已完成
- 从 A 列获取唯一值,并为每个唯一条目创建单独的数据框作为变量 - 已完成
- 将总计添加到每个数据框的底部 - 已完成
- 将单独的数据帧重新连接在一起 - 不完整
问题是我无法制定一种方法来创建正在使用的变量列表并将它们作为 arg 应用到命令 pd.concat。
样本数据集。数据集可能有更多独特的 BrandFlavor 或更少,这就是脚本必须灵活和动态的原因。
脚本:
import pandas as pd
import warnings
warnings.simplefilter(action='ignore')
excel_file = ('testfile.xlsx')
df = pd.read_excel(excel_file)
df = df.sort_values(by='This', ascending=False)
colarr = df.columns.values
arr = df[colarr[0]].unique()
for i in range(len(arr)):
globals()['var%s' % i] = df.loc[df[colarr[0]] == arr[i]]
for i in range(len(arr)):
if globals()['var%s' % i].empty:
''
else:
globals()['var%s' % i] = globals()['var%s' % i].append({'BrandFlavor':'Total',
'This':globals()['var%s' % i]['This'].sum(),
'Last':globals()['var%s' % i]['Last'].sum(),
'Diff':globals()['var%s' % i]['Diff'].sum(),
'% Chg':globals()['var%s' % i]['Diff'].sum()/globals()['var%s' % i]['Last'].sum() * 100}, ignore_index=True)
globals()['var%s' % i]['% Chg'].fillna(0, inplace=True)
globals()['var%s' % i].fillna(' ', inplace=True)
我在下面尝试过,但是列表是一系列字符串
vararr = []
count = 0
for x in range(len(arr)):
vararr.append('var' + str(count))
count = count + 1
df = pd.concat([vararr])
pd.concat 无法识别字符串。我厌倦了构建一个定义了 arg 的类,但遇到了同样的问题。
期望的结果是一个代码 sn-p,它生成一个与第 9/10 行创建的变量匹配的变量列表,并且可以由 pd.concat([list, of, vars, here])。它必须是动态的。谢谢
【问题讨论】:
-
请不要使用
globals来制作变量,这不是好习惯 -
你能试着减少你的问题吗?我很难理解您要解决的问题
-
MattR:问题表述为:问题是我无法制定一种方法来创建正在使用的变量列表并将它们作为 arg 应用于命令 pd.concat。跨度>
-
AWS_apprentice: 只是一个糟糕的形象,我会更新它。 ty
-
AWS_apprentice:如果不是全局变量,还有什么更好的方法来创建变量?
标签: python-3.x pandas dataframe dynamic arguments