Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据帧分组求和_Python_Pandas_Group By_Aggregate Functions_Dataframe - Fatal编程技术网

Python 数据帧分组求和

Python 数据帧分组求和,python,pandas,group-by,aggregate-functions,dataframe,Python,Pandas,Group By,Aggregate Functions,Dataframe,输入: 我想按new分组,并对numbers进行求和,以便输出为: Date letters numbers mixed new 0 1/2/2014 a 6 z1 1/2/2014 a 1 1/2/2014 a 3 z1 1/2/2014 a 2 1/3/2014 c 1 x3 1/3/2014 c 我已经看过了,但是运气不好 这是我的密码: Da

输入:

我想按
new
分组,并对
numbers
进行求和,以便输出为:

       Date letters numbers mixed         new
0  1/2/2014       a       6    z1  1/2/2014 a
1  1/2/2014       a       3    z1  1/2/2014 a
2  1/3/2014       c       1    x3  1/3/2014 c
我已经看过了,但是运气不好

这是我的密码:

       Date letters numbers mixed         new
0  1/2/2014       a       9    z1  1/2/2014 a
1  1/3/2014       c       1    x3  1/3/2014 c

此外,任何将
日期
字母
连接起来而不循环通过的技巧也会有所帮助。

您必须将
数字
列转换为
整数

import pandas
a=[['Date', 'letters', 'numbers', 'mixed'], ['1/2/2014', 'a', '6', 'z1'], ['1/2/2014', 'a', '3', 'z1'], ['1/3/2014', 'c', '1', 'x3']]
df = pandas.DataFrame.from_records(a[1:],columns=a[0])
f=[]
for i in range(0,len(df)):
    f.append(df['Date'][i] + ' ' + df['letters'][i])
df['new']=f
您可以获取要与之合并的数据帧:

import pandas as pd
a=[['Date', 'letters', 'numbers', 'mixed'], ['1/2/2014', 'a', '6', 'z1'], ['1/2/2014', 'a', '3', 'z1'], ['1/3/2014', 'c', '1', 'x3']]
df = pd.DataFrame.from_records(a[1:],columns=a[0])
df['new'] = df.Date + " " + df.letters
df.numbers = df.numbers.astype(int)

print df

       Date letters  numbers mixed         new
0  1/2/2014       a        6    z1  1/2/2014 a
1  1/2/2014       a        3    z1  1/2/2014 a
2  1/3/2014       c        1    x3  1/3/2014 c
然后,您可以执行您的
groupby

df_to_merge = df[df.columns[~df.columns.isin(['numbers'])]].drop_duplicates()
要获得您发布的结果,请执行
merge

df_grouped = pd.DataFrame(df.groupby('new').numbers.sum()).reset_index()

谢谢你的指点。请你修改一下你的答案,以得到一个通用的解决方案?如果我有50列而不是示例中的4列会怎么样。顺便说一句,我尝试了你的代码,但仍然得到了原始的输入。你必须发布你的输出,因为我得到了你想要的结果。我将更新以使其更具一般性。还有…你真的需要“新”专栏,还是只是用它来分组?谢谢你的更新。我确实需要“new”列,它将是数据集的一部分。@jason\u cant\u code您可以使用
df['big numbers']
熊猫文档和简介中的所有语法信息来引用该列
df_result = df_to_merge.merge(df_grouped)
print df_result

       Date letters mixed         new  numbers
0  1/2/2014       a    z1  1/2/2014 a        9
1  1/3/2014       c    x3  1/3/2014 c        1