Pandas在第2部分中修改DataFrames

时间:2017-08-04 16:54:43

标签: python loops pandas dataframe

给出以下数据框:

import pandas as pd
k=pd.DataFrame({'A':[1,1],'B':[3,4]})
e=pd.DataFrame({'A':[1,1],'B':[6,7]})
k
    A   B
0   1   3
1   1   4

e
    A   B
0   1   6
1   1   7

我想在循环中应用group-by sum,但这样做似乎并没有修改数据帧。

这是我尝试过的:

for d in dfsout:
    d=d.groupby(d.columns[0]).apply(sum)
    print(d)

当我在循环中打印d时,它表明正在进行正确的操作......

   A  B
A      
1  2  7
   A   B
A       
1  2  13

...但是当我打印数据帧k和e时,它们没有被修改。

k
    A   B
0   1   3
1   1   4

e
    A   B
0   1   6
1   1   7

更新

我也尝试将它用作函数(在循环中工作,仍然不会修改):

def moddf(d):
    return d.groupby(d.columns[0]).apply(sum)
for d in dfsout:
    d=moddf(d)
    print(d)

提前致谢!

2 个答案:

答案 0 :(得分:0)

这有效:

首先,定义函数

def moddf(d):
    return d.groupby(d.columns[0]).apply(sum)

接下来,重新分配修改后的数据框,如下所示:

k,e=[moddf(x) for x in dfsout]

dfsout2=[moddf(x) for x in dfsout]

答案 1 :(得分:0)

好的,你可以试试这个

import pandas as pd
k=pd.DataFrame({'A':[1,1],'B':[3,4]})
e=pd.DataFrame({'A':[1,1],'B':[6,7]})
fields=['k','e']
dfsout=[k,e]
variables = locals()
for d,name in zip(dfsout,fields):
    variables["{0}".format(name)]=d.groupby(d.columns[0]).apply(sum)


k
Out[756]: 
   A  B
A      
1  2  7
e
Out[757]: 
   A   B
A       
1  2  13