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"
有谁知道如何修复/解决这个问题?
答案 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