Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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_Apache Spark - Fatal编程技术网

如何使用Python获取具有最大值的行?

如何使用Python获取具有最大值的行?,python,apache-spark,Python,Apache Spark,我有R代码使用数据表合并具有相同名字和姓氏的行,但选择指定列的最大值(例如Score1、Score2、Score3)。输入/输出如下: 输入: FirstName LastName Score1 Score2 Score3 fn1 ln1 41 88 50 fn1 ln1 72 66 77 fn1 ln1 69 72 90 fn2 ln2 80

我有R代码使用数据表合并具有相同名字和姓氏的行,但选择指定列的最大值(例如Score1、Score2、Score3)。输入/输出如下:

输入:

FirstName LastName Score1 Score2 Score3 fn1 ln1 41 88 50 fn1 ln1 72 66 77 fn1 ln1 69 72 90 fn2 ln2 80 81 73 fn2 ln2 59 91 66 fn3 ln3 75 80 66 FirstName LastName Score1 Score2 Score3 fn1 ln1 72 88 90 fn2 ln2 80 91 73 fn3 ln3 75 80 66 姓姓得1分2分3分 fn1 ln1 41 88 50 fn1 ln1 72 66 77 fn1 ln1 69 72 90 fn2 ln2 80 81 73 fn2 ln2 59 91 66 fn3 ln3 75 80 66 输出:

FirstName LastName Score1 Score2 Score3 fn1 ln1 41 88 50 fn1 ln1 72 66 77 fn1 ln1 69 72 90 fn2 ln2 80 81 73 fn2 ln2 59 91 66 fn3 ln3 75 80 66 FirstName LastName Score1 Score2 Score3 fn1 ln1 72 88 90 fn2 ln2 80 91 73 fn3 ln3 75 80 66 姓姓得1分2分3分 fn1 ln1 72 88 90 fn2 ln2 80 91 73 fn3 ln3 75 80 66
现在我想将R程序迁移到Spark。如何使用Python实现这一点?

以下是使用内置Python包实现这一点的方法:

import csv
from collections import OrderedDict

newdata = OrderedDict()
with open('test.csv', 'rb') as testr:
    testreader = csv.reader(testr)
    for row in testreader:
        name = row[0]+ '-' + row[1]
        if name in newdata:
            newdata[name] = [max(existdata, readdata) for existdata, readdata in zip(newdata[name], row[2:])]
        else:
            newdata[name] = row[2:]

    with open('newdata.csv', 'wb') as testw:
        testwriter = csv.writer(testw)
        for name, data in newdata.iteritems():
            testwriter.writerow(name.split('-') + data)
最好的办法是和熊猫一起做,过一会儿再发

编辑: 以下是熊猫的代码:

import pandas
readfile = pandas.read_csv('test.csv') # assuming your CSV is same directory as program
print readfile

输出:


**@user2241910很快发布了pandas解决方案:)

正如durbachit所建议的,你会想使用pandas

import pandas as pd
df = pd.read_csv(**your file here**)
max_df = df.groupby(by=['FirstName','LastName']).max()

而max_df将是您所需的输出

您在python中的输入如何?它是列表字典还是json?或者它是一个带有行的简单文本文件?Hi be_good_do_good,这是一个带有行的CSV文件。我不是python专家,但我已经玩了一段时间熊猫,至少可以给你一些线索。熊猫是可以肯定使用的模块。然后我建议使用groupby(虽然我没有使用它的经验,所以不确定语法)。分组后,您可以找到每个组的每个分数列的最大值。因此,首先
将pandas导入为pd
,然后将数据文件加载到数据帧中(可以随意调用,示例称之为df):
df=pd.read_csv(**此处为您的文件**)
,然后搜索StackOverflow和pandas文档以了解groupby操作的详细信息。谢谢durbachit。你的方向是正确的!:)谢谢你的回答。这正是我想要的!提供pandas解决方案要快一分钟,因此提高投票率:)Python pandas非常强大,提高投票率!!:)