我正在尝试在Python中连接多个列。要连接的列根据其他一些列的值而有所不同。您如何有效地做到这一点?
我已经尝试创建一个对条件字段进行分组的键,并将其与用于检查每一行是否在特定组中的for循环结合使用。当然,这需要很长时间才能完成。
例如,给定一个数据帧(df):
df = pd.DataFrame({'cond_1': ['A', 'B', 'B', 'C', 'D'],
'cond_2': ['one', 'two', 'three', 'three', 'four'],
'concat_1': ['Mon', 'Tue', 'Fri', 'Wed', 'Thu'],
'concat_2': ['Sep', 'Oct', 'Oct', 'Nov', 'Dec'],
'concat_3': ['first', 'second', 'second', 'third', 'fourth']})
我有以下规则:
-如果cond_1 ='A',则concat_1 + concat_2
-如果cond_1 ='B',则如果cond_2 ='two',则concat_1 + concat_3否则concat_1 + concat_2
-如果cond_1位于('C','D')中,则concat_2 + concat_3
这将导致以下结果:
cond_1 | cond_2 | concat_1 | concat_2 | concat_3 | result
---------------------------------------------------------
A | one | Mon | Sep | first | MonSep
B | two | Tue | Oct | second | Tuesecond
B | three | Fri | Oct | second | FriOct
C | three | Wed | Nov | third | Novthird
D | four | Thu | Dec | fourth | Decfourth
感谢您的帮助!
答案 0 :(得分:0)
You do this with apply
using a function to do the if
check and concatenation
like this
def concate_it(row):
if row['cond_1'] == 'A':
return row['concat_1'] + row['concat_2']
elif row['cond_1'] == 'B' and row['cond_2'] == 'two':
return row['concat_1'] + row['concat_3']
elif row['cond_1'] == 'B' and row['cond_2'] != 'two':
return row['concat_1'] + row['concat_2']
elif row['cond_1'] in ['C', 'D']:
return row['concat_2'] + row['concat_3']
df['result'] = df.apply(lambda row : concate_it(row), axis=1)