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

2024-09-29 01:38:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据帧:

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

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


Tags: 数据字符串信息falsetruevaluecodecolb
2条回答

你可以试试这样的

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)

使用^{}作为Code列的索引,然后使用^{}与所有不带Code和分隔符的列进行矩阵乘法,移除分隔符并将序列转换为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'))

   Code BooleanInformation
0  J060                   
1  J010                   
2  J030         ColB,Value
3  J111                   
4  Z290          ColA,ColB
5  B340              Value
6  B340               ColA
7  B340               ColB

相关问题 更多 >