我是python / pandas用户,我有多个数据框,例如df1,df2,df3...。 我想将它们命名为A,B,C,因此我写的如下。
df_dict = {"A":df1, "B":df2,'C':df3,....}
每个数据框都有“价格”列,我想知道以下公式的输出。
frequency=df.groupby("Price").size()/len(df)
我做了以下定义,并希望从每个数据框中获取输出。
def Price_frequency(df,keys=["Price"]):
frequency=df.groupby(keys).size()/len(df)
return frequency.reset_index().to_csv("Output_%s.txt" %(df),sep='\t')
作为初审,我做了 Price_frequency(df1,keys = [“ Price”]) 但这没有用。看来%s是错误的。
理想情况下,我希望输出文件名为“ Output_A.txt”,“ Output_B.txt” ... 如果您能帮助我,我将非常感谢。
答案 0 :(得分:1)
几点:
%s
要求您输入一个字符串。但是在Python 3.6及更高版本中,您可以使用格式化的字符串文字,您可能会发现它们更具可读性。return
语句。因此您可以执行以下操作:
def price_frequency(df_dict, df_name, keys=['Price']):
frequency = df_dict[df_name].groupby(keys).size() / len(df_dict[df_name].index)
frequency.reset_index().to_csv(f'Output_{df_name}.txt', sep='\t')
df_dict = {'A': df1, 'B': df2, 'C': df3}
for df_name in df:
price_frequency(df_dict, df_name, keys=['Price'])
答案 1 :(得分:0)
遍历列将获得输出。
def Price_frequency(df):
for col in df.columns[2:]
frequency=df.groupby(col).size()/len(df)
return frequency.reset_index().to_csv("Output_%s.txt" %(col),sep='\t')
参考:Pandas: Iterate through columns and starting at one column
注意:还没有测试这个问题