使用Pandas的Python行计算

使用Pandas的Python行计算,python,pandas,Python,Pandas,我正在使用python(使用pandas库)处理大表 我想执行各种类型的向量操作,例如与表的每一行的关联 这可能是一个简单的问题,但对我来说,很难处理数据帧结构。我不知道如何将每一行(或列)转换为列表(或numpy数组) 即使计算行数似乎也不是一个简单的问题,因为像df.count()这样的函数似乎忽略了空数据 简单数据表和预期结果表如下所示。在这种情况下,我想计算每行对的总和 实表的大小要大得多(超过1000行和1000列),并且包含一些空值 Data.csv: Label Col1 Col

我正在使用python(使用pandas库)处理大表

我想执行各种类型的向量操作,例如与表的每一行的关联

这可能是一个简单的问题,但对我来说,很难处理数据帧结构。我不知道如何将每一行(或列)转换为列表(或numpy数组)

即使计算行数似乎也不是一个简单的问题,因为像
df.count()
这样的函数似乎忽略了空数据

简单数据表和预期结果表如下所示。在这种情况下,我想计算每行对的总和

实表的大小要大得多(超过1000行和1000列),并且包含一些空值


Data.csv:

Label Col1 Col2
Row1 1 2
Row2 3 4
Row3 5 6

Output.csv:

Label Col3
Row1,Row2 4,6
Row1,Row3 6,8
Row2,Row3 8,10

解决方案的一部分,因为您将有名称稍有不同的重复行,因此无法应用数据帧的drop_duplicates方法:

import pandas as pd
from io import StringIO

data = """
Label Col1 Col2
Row1 1 2
Row2 3 4
Row3 5 6
"""

df1 = pd.DataFrame()

for row in range(df.shape[0]):
   df1 = pd.concat([df1, df.ix[row,:] + df[df['Label'] != df.Label[row]]])

df1.reset_index(drop=True, inplace=True)

In [103]: df1
Out[103]:
      Label Col1 Col2
0  Row1Row2    4    6
1  Row1Row3    6    8
2  Row2Row1    4    6
3  Row2Row3    8   10
4  Row3Row1    6    8
5  Row3Row2    8   10

熊猫在使用柱子时速度更快,更自然。因此,我建议先转置DF,然后对列求和


链接:

你说的
空值是什么意思?是否存在空值或
NaN
值,或者该值是否正好等于零。如果存在这样一个
空值
,您希望输出是什么样的?@albert抱歉我解释得不好。你可能认为这是一种价值观。当我的真实数据集从图像转换为浮点值时,有一些值。但在这种情况下,这并不重要,因为我将它们作为预处理删除。您可以使用
shape
方法获得行数:
df。shape[0]
将是行数。@Anton Protopov感谢您的建议。我确认shape[0]返回了包含空值的行数(标签除外)。此外,shape[1]返回了列数,包括标签和空值。我认为必须将DataFrame转换为列表,但似乎可以直接使用DataFrame完成。虽然还需要做一些工作,但非常感谢您的回答。@为了在完成后特别显示您的代码。目前,我只能通过从DataFrame生成列表并对每行运行双for循环来完成此操作,这似乎是一种BruceForce方法。我想找到使用数据帧本身的解决方案。谢谢你的建议。我知道T函数可以很容易地完成表的转置,但我不知道使用列更好。我最好使用DataFrame来找到解决方案。@特别是,DataFrame基本上是不同类型列的集合/列表,而不是关系数据库,它是行的集合。对于典型的统计函数,如sum()、mean()、variance()等,每个列都可以快速操作。另一个用于计算目的的建议将列强制为本机数字类型(如float64或int)。尽管我的目标是使用更复杂的函数,比如每个向量之间的欧几里德距离,但它似乎是以同样的方式应用的。事实上,我以前认为处理行更自然。非常感谢你的提示。