按行条件将两列或更多列合并为新列

时间:2019-07-28 15:56:32

标签: pandas

我想将两列或更多列合并为新列,根据行条件(即1,一个整数),新列应为包含连接字符串的列。

我尝试使用非零值将我们的行过滤为零,但失败。

index LAWSUIT BOARD-MEETING
A          1    0
B          0    0
C          1    1
D          0    1

对此进行了尝试,但它只是结合了所有索引:

rdf['NEW'] = rdf.apply(lambda x: ','.join(x.index) if x.nonzero() else 0, axis=1)

预期“ NEW”列应如下所示:

index LAWSUIT BOARD-MEETING   NEW
A          1    0             LAWSUIT
B          0    0
C          1    1             LAWSUIT,BOARD-MEETING
D          0    1             BOARD-MEETING

任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:1)

使用:

final=df.assign(NEW=(df.dot(df.columns+',').str[:-1]))

       LAWSUIT  BOARD-MEETING                    NEW
index                                               
A            1              0                LAWSUIT
B            0              0                       
C            1              1  LAWSUIT,BOARD-MEETING
D            0              1          BOARD-MEETING

答案 1 :(得分:0)

这是for循环适用于大熊猫的少数事物之一

col_names = rdf.columns.tolist()
rdf["NEW"] = ""

for col in col_names:
    rdf.loc[rdf[col] == 1, "NEW"] = rdf.loc[rdf[col] == 1, "NEW"] + ("," + col)

rdf["NEW"] = rdf["NEW"].str.strip(",")

答案 2 :(得分:0)

这可以完成工作

let list: [ReminderModel] = [
    ReminderModel(text: "Buy Bananas", closed: true),
    ReminderModel(text: "Meet John", closed: false),
    ReminderModel(text: "MMhh", closed: false),
    ReminderModel(text: "4", closed: false),
    ReminderModel(text: "5", closed: false),
    ReminderModel(text: "6", closed: false),
]

var current: Int = 0

struct ReminderList: View {
    var body: some View {
        VStack() {
            let last = list.last!

            if list.count % 3 == 2 {
                let secondLast = list.dropLast().last!

                Reminder(closed: secondLast.closed, text: secondLast.text)
                Reminder(closed: last.closed, text: last.text)
           else {
                HStack() {
                    Reminder(closed: last.closed, text: last.text)
                }
            }
        }
    }
}