如何将熊猫数据帧上的布尔列信息复制到另一个?

时间:2021-02-11 13:45:13

标签: python pandas dataframe

我有以下熊猫数据框:

ColA    ColB    Code    Value
FALSE   FALSE   J060    FALSE
FALSE   FALSE   J010    FALSE
FALSE   TRUE    J030    TRUE    
FALSE   FALSE   J111    FALSE
TRUE    TRUE    Z290    FALSE
FALSE   FALSE   B340    TRUE
TRUE    FALSE   B340    FALSE
FALSE   TRUE    B340    FALSE

列 ColA、ColB 和 Value 是布尔列。我想创建一个具有相同行数的新数据框,以便将布尔列的信息转换为字符串:

Code    BooleanInformation
J060    
J010    
J030    ColB,Value
J111    
Z290    ColA,ColB
B340    Value
B340    ColA
B340    ColB

代码列应保持不变。当第一个数据框中出现 TRUE 值时,应将列名(ColA、ColB 或 Value)插入到第二个数据框中的字符串中。

2 个答案:

答案 0 :(得分:1)

使用 DataFrame.set_index 作为来自 Code 列的索引,然后使用 DataFrame.dot 矩阵乘以所有没有 Code 和分隔符的列,删除分隔符并将系列转换为 {{1} }:

DataFrame

仅选择布尔列的替代方法:

df1 = (df.set_index('Code')
         .dot(df.columns.drop('Code') + ',')
         .str[:-1]
         .reset_index(name='BooleanInformation'))

df1 = (df.set_index('Code')
         .dot(df.select_dtypes(bool).columns + ',')
         .str[:-1]
         .reset_index(name='BooleanInformation'))

答案 1 :(得分:1)

你可以尝试这样的事情。

import pandas as pd

df = pd.read_csv('example.txt')

df[['ColA', 'ColB', 'Value']].astype(bool)

df['BooleanInformation'] = df.apply(lambda row: ','.join([column for column in df.columns if row[column] and column !='Code']), axis=1)

df.drop(df.columns[[0,1,3]], axis=1, inplace=True)

print(df)