熊猫根据另一个中的连续值将一列中的字符串连接起来

时间:2019-09-29 07:05:29

标签: python pandas

我在DataFrame col1和col2中有两个列,我需要生成结果列。 每个FD都有很少的相关MS,这些MS应该填充在结果列中,如图

enter image description here

const so1 = ["lat","long","abc","def","abcc","deef"]

let result = so1
  .map((item, id, array) => ((id % 2) !== 0 && id !== (array.length - 1)) ? item + '|' : (id !== (array.length - 1)) ? item + '&' : item)
  .join('')
  .replace(/&/g, ',')

console.log( result )
console.log( `[${result}]` )

2 个答案:

答案 0 :(得分:3)

您可以使用GroupBy.agg,连接字符串并将其分配回“ FD”行:

grp = (df.assign(col3=(df['col1'] == 'FD').cumsum())
         .query("col1 == 'MS'")
         .groupby('col3')['col2'].agg('|'.join))
df.loc[df['col1'] == 'FD', 'result'] = grp.values # grp.to_numpy(); pandas >= 0.24

df
  col1 col2 result
0   FD    A    B|C
1   MS    B    NaN
2   MS    C    NaN
3   FD    D  E|F|G
4   MS    E    NaN
5   MS    F    NaN
6   MS    G    NaN
7   FD    H    I|J
8   MS    I    NaN
9   MS    J    NaN

答案 1 :(得分:1)

  • 使用(df [“ col1”] ==“ FD”)。cumsum()按“ FD”的计数对行进行分组
  • 对于第一个col1的col2的每个组联接值
  • 将值分配给col1中带有“ FD”的行的“结果”列
df["result"] = ""
df.loc[df["col1"]=="FD", "result"] = df.groupby((df["col1"]=="FD").cumsum()) \
.apply(lambda group: group["col2"][1:].str.cat(sep="|")).values

df
相关问题