我有这些数据
ID A B C
0 0 True False False
1 1 False True False
2 2 False False True
我想把它变成
ID group
0 0 A
1 1 B
2 2 C
这就是MWE
#!/usr/bin/env python3
import pandas as pd
df = pd.DataFrame({
'ID': range(3),
'A': [True, False, False],
'B': [False, True, False],
'C': [False, False, True]
})
result = pd.DataFrame({
'ID': range(3),
'group': ['A', 'B', 'C']
})
result.group = result.group.astype('category')
print(df)
print(result)
我可以做 df.apply(lambda 行: ...魔术.., 轴=1)
。但是,熊猫自己的工具不是有更优雅的方式吗?
还有另一种方式:
df.set_index(['ID'])\
.rename_axis('group', axis=1)\ # getting column name correct
.stack()\ # reshaping getting column headers into dataframe rows
.loc[lambda x: x]\ # filtering for True
.reset_index()\ # moving ID back into dataframe columns
.drop(0, axis=1) # dropping boolean column
输出:
ID group
0 0 A
1 1 B
2 2 C
您可以使用df.dot
:
df['group'] = df[['A', 'B', 'C']].dot(df.columns[1:])
您可以使用<code>pd。melt()来重新形状和重命名,然后使用<code>查询
pd.melt(df,id_vars=['ID'],var_name= 'group').query('value') \
.drop('value',axis=1).reset_index(drop=True)
ID group
0 0 A
1 1 B
2 2 C
问题内容: 我正在写一个小脚本来帮助日本假名记忆。我如何将以下列表合并为一个?我尝试如下。 问题答案: 单程:
我想合并火花中的多个数组类型[字符串类型]列以创建一个数组类型[字符串类型]。为了组合两列,我在这里找到了解决方案: 将Array[string]类型的两个spark sql列合并成一个新的Array[string]列 但是如果我不知道编译时的列数,我该如何进行组合呢?在运行时,我将知道所有要组合的列的名称。 一种选择是使用上面stackoverflow问题中定义的UDF,在循环中多次添加两列。但
问题内容: 这个问题已经在这里有了答案 : 如何在Python中将两个列表组合成字典?[重复] (6个答案) 5年前关闭。 Python中是否有将两个列表合并成字典的 内置 函数?喜欢: 哪里: 充当包含键的列表。 充当包含值的列表 有一个名为array_combine的函数可以实现此效果。 问题答案: 似乎这样应该可以,尽管我猜这不是 一个 单一的功能: 从这里开始:如何在Python中将两个列
问题内容: 我有 我想要 问题答案:
本文向大家介绍MySQL查询将两列合并为一个列?,包括了MySQL查询将两列合并为一个列?的使用技巧和注意事项,需要的朋友参考一下 您可以为此使用功能。在该函数中,它从列中返回第一个NON NULL值。为了理解这个概念,让我们首先创建一个演示表 使用insert命令在表中插入一些记录。查询如下- 现在,您可以使用select语句显示表中的所有记录。查询如下- 以下是输出 这是将两列合并为一个查询的
问题内容: 我想将3个列表合并到一个列表中。例如,我有三个列表: 最后我想得到 出,, 有没有更快的方法来合并这三个列表?这是我的代码: 问题答案: