如何基于列名将dataframe值转换为字符串

lnxxn5zx  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(311)

我有一个Dataframe,大约有20万行和20列,如下所示:

List |Apple|Banana|Bread|Milk|Sweets|Water|
List1|0    | 0    |0    | 1  | 0    | 0   |
List2|0    | 1    |0    | 0  | 0    | 0   |
List3|0    | 0    |0    | 1  | 0    | 0   |
List4|0    | 0    |0    | 0  | 1    | 0   |
List5|0    | 0    |1    | 0  | 0    | 0   |

我想各换一个 1 使用相关列名,然后将Dataframe缩减为以下输出:

List |Items

List1|Milk    
List2|Banana   
List3|Milk    
List4|Sweets    
List5|Bread

你知道如何做到这一点,而不必单独选择每一列并逐个重命名它们吗?

qvtsj1bj

qvtsj1bj1#

这是一个解决方案 DataFrame.dot ,如果有多个列,则连接列名称 1 按行 , ,如果只有一个值也起作用:

df = df.set_index('List')
df1 = df.dot(df.columns + ',').str[:-1].reset_index(name='Items')
print (df1)
    List   Items
0  List1    Milk
1  List2  Banana
2  List3    Milk
3  List4  Sweets
4  List5   Bread

如果总有一个 1 每行也可以使用:

df = df.set_index('List')
df1 = df.dot(df.columns).reset_index(name='Items')
print (df1)
    List   Items
0  List1    Milk
1  List2  Banana
2  List3    Milk
3  List4  Sweets
4  List5   Bread

但如果有多个值,它将使用不带分隔符的join,例如:

print (df)
    List  Apple  Banana  Bread  Milk  Sweets  Water
0  List1      1       0      0     1       0      0 <- Apple,Milk=1
1  List2      0       1      0     0       0      0
2  List3      0       0      0     1       0      0
3  List4      0       0      0     0       1      0
4  List5      0       0      1     0       0      0

df = df.set_index('List')
df1 = df.dot(df.columns).reset_index(name='Items')
print (df1)
    List      Items
0  List1  AppleMilk
1  List2     Banana
2  List3       Milk
3  List4     Sweets
4  List5      Bread

带分隔符的输出为:

df = df.set_index('List')
df1 = df.dot(df.columns + ',').str[:-1].reset_index(name='Items')
print (df1)
    List       Items
0  List1  Apple,Milk
1  List2      Banana
2  List3        Milk
3  List4      Sweets
4  List5       Bread

相关问题