基于不同列更改数据帧列中的值(python)

2024-04-26 09:46:34 发布

您现在位置:Python中文网/ 问答频道 /正文

    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"

有人知道如何解决这个问题吗?你知道吗


Tags: 数据代码indataframeforvalueaptval
3条回答

代码中的for循环太多。您只需要在行上迭代一次,对于满足您的条件的任何行,您都可以进行更改。你知道吗

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

edit:我使用str将Col1中的前一个值转换为字符串,然后再追加,因为您说过这里有时有非字符串值。如果这不适合你,请张贴你的测试数据和结果。你知道吗

与其使用循环,不如直接使用熊猫:

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

可以使用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

相关问题 更多 >