Pandas DataFrame仅应用返回第一列

时间:2017-10-06 07:30:58

标签: python python-3.x pandas

我正在尝试搜索数据框中一行中所有列的文本“总计”。

def f(row):
    for i in range(0,len(row))
        if re.search('Total', row[i]) is None:
            return False
        else:
            return True

data['newColumn'] = data.apply(f, axis=1)

假设在数据帧中每行调用一次函数f是否正确?

我的newColumn只会从数据框的第一列获取总数,即使len(row)实际返回正确的列数。

添加打印(row [i])也会打印出正确的值。但是,对于新列的分配仅为True,其中Total位于第一列的文本中。我似乎也无法迭代传递给函数的行。它有类型系列。

2 个答案:

答案 0 :(得分:1)

由于循环内的两个case都有一个return语句,因此该函数将始终在第一列之后返回。

请改为尝试:

import pandas as pd
df = pd.DataFrame({"row_1": ["foo", "Total", "bar"], 
                   "row_2": ["Total", "foo", "bar"]})
df["is_total_in_row"] = df.apply(
    lambda row : "Total" in list(row), axis=1)
print(df)

返回

      row_1  row_2  is_total_in_row
 0    foo  Total             True
 1  Total    foo             True
 2    bar    bar            False

答案 1 :(得分:1)

从@Sumido借用样本数据集:

In [43]: df['newColumn'] = df.select_dtypes(['object']).sum(1).str.contains('Total')

In [44]: df
Out[44]:
   row_1  row_2  newColumn
0    foo  Total       True
1  Total    foo       True
2    bar    bar      False

说明:

In [50]: df.select_dtypes(['object']).sum(1)
Out[50]:
0    fooTotal
1    Totalfoo
2      barbar
dtype: object