pandas 循环+字段中的字段+ Python

z9smfwbn  于 2022-12-09  发布在  Python
关注(0)|答案(3)|浏览(140)

我对python很陌生。在SQL中,可以创建循环函数,例如
字段= ['COL2','COL3']
对于字段中字段:Sql查询。
我想用Python来复制它,但是很难找到正确的方法。

df
    COL1    COL2    COL3    COL4
0   aaa     a1234   b1234   5
1   aaa     a2345   b2345   10
2   aaa     a3456   b3456   15
3   aaa     a5678   b5678   20
4   bbb     a5678   b5678   25

            
                
Preferred outcome.  

0   COL2    aaa bbb Grand Total
1   a1234   5       5
2   a2345   10      10
3   a3456   15      15
4   a5678   20  25  45
                
                
                
0   COL3    aaa bbb Grand Total
1   b1234   5       5
2   b2345   10      10
3   b3456   15      15
4   b5678   20  25  45

希望这对你有帮助。
主要的问题是,我希望不知道这种类型的查询在Python中被称为什么。

0vvn1miw

0vvn1miw1#

为此,我建议使用panda中的pivot_table函数:

import pandas as pd
result =  pd.pivot_table(df, index = 'COL2', columns="COL1",values="COL4",aggfunc=np.sum).fillna(0)

对于总计,您可以使用

result["grand_total"] = result["aaa"] + result["bbb"]
1tu0hz3e

1tu0hz3e2#

在这种情况下,你可以使用**pivot_table,就像@robinhood的答案一样。或者,你可以使用crosstab**。如果你要对多个列执行这些操作,我们可以通过一个循环将处理过的 Dataframe 保存到一个列表中:

fields = ['COL2','COL3']
final_dataframes=[]
for i in fields:
    dfx=pd.crosstab(df[i], df['COL1'], values=df['COL4'],aggfunc='sum').fillna(0)
    dfx['Grand Total']=dfx['aaa'] + dfx['bbb']
    final_dataframes.append(dfx)

print(final_dataframes[0]) # for example, get first dataframe.
'''
        aaa   bbb  Grand Total
COL2                          
a1234   5.0   0.0          5.0
a2345  10.0   0.0         10.0
a3456  15.0   0.0         15.0
a5678  20.0  25.0         45.0
'''

我们可以在两行中执行所有这些操作:

final_dataframes=[pd.crosstab(df[i], df['COL1'], values=df['COL4'],aggfunc='sum').fillna(0) for i in fields]
final_dataframes=[i.assign(Grand_Total=(i['aaa'] + i['bbb'])) for i in final_dataframes]
3phpmpom

3phpmpom3#

循环意味着一遍又一遍地重复某个东西,直到满足特定的条件。循环的类型1. for循环。Python中的for循环用于迭代序列(列表、元组、集合、字典和字符串)。2. While循环。只要条件为真,while循环就用于执行一组语句。3.嵌套循环。如果一个循环存在于另一个循环的主体内,它被称为嵌套循环。

相关问题