根据不同的列更改数据框列中的值(python)

时间:2015-08-01 00:34:57

标签: python string pandas dataframe

    Col1    Col2
0    APT     UB0
1    AK0     UUP
2    IL2     PB2
3    OIU     U5B
4    K29     AAA  

我的数据框与上述数据类似。如果Col2中的相应值中包含字母“B”,我正在尝试更改Col1中的值。如果Col2中的值为“B”,那么我想在Col1的值末尾添加“-B”。

最终我希望Col1看起来像这样:

       Col1
0     APT-B
1       AK0
2     IL2-B
..      ...

我知道如何处理它...但我有点困惑因为我知道我的代码不正确。另外在我的Col1实际代码中有NaN值...当我尝试 val + =“ - B”时肯定会出错,因为无法添加字符串和一个浮子。

for value in dataframe['Col2']:
    if "Z" in value:
        for val in dataframe['Col1']:
            val += "-B"

有谁知道如何修复/解决这个问题?

3 个答案:

答案 0 :(得分:3)

不要使用循环,而是直接使用pandas:

import pandas as pd

df = pd.DataFrame({'Col1': ['APT', 'AK0', 'IL2', 'OIU', 'K29'], 'Col2': ['UB0', 'UUP', 'PB2', 'U5B', 'AAA']})
df.loc[df.Col2.str.contains('B'), 'Col1'] += '-B'

print(df)

输出:

Col1 Col2
0  APT-B  UB0
1    AK0  UUP
2  IL2-B  PB2
3  OIU-B  U5B
4    K29  AAA

答案 1 :(得分:0)

您的代码中有太多“for”循环。您只需要对行进行一次迭代,对于满足条件的任何行,您都需要进行更改。

for idx, row in df.iterrows():
    if 'B' in row['Col2']:
        df.loc[idx, 'Col1'] = str(df.loc[idx, 'Col1']) + '-B'

编辑:我使用str在附加之前将Col1中的前一个值转换为字符串,因为你说你有时会有非字符串值。如果这对您不起作用,请发布您的测试数据和结果。

答案 2 :(得分:0)

您可以使用lambda表达式。如果' B'在Col2,然后' -B'附加到Col1。最终结果将分配回Col1

df['Col1'] = df.apply(lambda x: x.Col1 + ('-B' if 'B' in x.Col2 else ''), axis=1)
>>> df
    Col1 Col2
0  APT-B  UB0
1    AK0  UUP
2  IL2-B  PB2
3  OIU-B  U5B
4    K29  AAA