【发布时间】:2018-02-18 21:50:56
【问题描述】:
对于 pandas DataFrame 中的所有行,我想将行写入一个新的 csv 文件,其中 both 列 1 和 6 的值与所有列的相应列值匹配其他行,仅写入在不同列中找到的最大值的行 (3)。 (第 1 列包含文本,第 3 列和第 6 列包含整数。)
例如:
0 1 2 3 4 5 6
0 spam 142 6
1 eggs 212 3
2 bacon 111 6
3 eggs 128 3
4 spam 221 6
5 spam 144 4
6 spam 145 6
在上面的示例中,第 0 行的第 1 列和第 6 列值(垃圾邮件,6)与第 4 行和第 6 行的值匹配(都具有“垃圾邮件,6”)。由于第 4 行的第 3 列值 (221) 高于 0 (142) 或 6 (145),我想写第 4 行。此外,第 1 行和第 3 行相互匹配,第 1 行具有更高的第 3 列值 (212 )。
期望的输出,第 1 部分:
1 eggs 212 3
4 spam 221 6
第 2 部分...某些行将导致不匹配。在那种情况下,我也想写那些行(在上面的例子中,第 2 行和第 5 行没有任何匹配项)。
所以考虑到这两部分,我希望输出写入这些行:
1 eggs 212 3
2 bacon 111 6
4 spam 221 6
5 spam 144 4
以下是我认为最有效的方法:
- 写入一个新列 (7) 并为匹配的行添加整数 1 没有最高的列值。
- 然后打印行 第 7 列的“不是 1”。
所以,我需要基于第 3 列进行迭代,以某种方式识别那些值小于其他匹配值的行,写入新的第 7 列,并写入第 7 列中没有值的行?
有没有更好的流程来做到这一点?我所知道的是我需要进行某种迭代、掩码或列写入,或三者的某种组合。我在这里看到了几个与迭代相关的问题,但没有一个问题能帮助我理解在这种情况下如何做到这一点。我是 pandas 的新手,但猜测它的开头是这样的:
import csv
import pandas as pd
df1 = pd.read_csv('pyall.csv')
for index, row in df.itertuples():
mypairmatch = (index[2],index[7]) # stores two column values (1,6) of index
【问题讨论】: