英文:
How to create new column with header name as value based on specific condition of multiple columns?
问题
假设我有一个如下所示的数据框:
import numpy as np
import pandas as pd
df = pd.DataFrame({"ID":[1, 1, 2, 3, 3, 4],
"CLASS A":[np.nan, 1, np.nan, np.nan, np.nan, np.nan],
"CLASS B":[np.nan, np.nan, np.nan, np.nan, np.nan, np.nan],
"CLASS C":[np.nan, np.nan, np.nan, 1, np.nan, np.nan],
"DEPTH":[12, 31, 45, 66, 32, 46]})
df
我想要创建一个新的列(df["FILTER"]
),该列的值是包含数字1的列的名称,但仅查看列(CLASS A、CLASS B和CLASS C)。因此,我的最终数据框应该如下所示:
ID CLASS A CLASS B CLASS C DEPTH FILTER
0 1 NaN NaN NaN 12 NaN
1 1 1.0 NaN NaN 31 CLASS A
2 2 NaN NaN NaN 45 NaN
3 3 NaN NaN 1.0 66 CLASS C
4 3 NaN NaN NaN 32 NaN
5 4 NaN NaN NaN 46 NaN
有人可以帮助我吗?
英文:
Imagine I have a dataframe like this:
import numpy as np
import pandas as pd
df = pd.DataFrame({"ID":[1, 1, 2, 3, 3, 4],
"CLASS A":[np.nan, 1, np.nan, np.nan, np.nan, np.nan],
"CLASS B":[np.nan, np.nan, np.nan, np.nan, np.nan, np.nan],
"CLASS C":[np.nan, np.nan, np.nan, 1, np.nan, np.nan],
"DEPTH":[12, 31, 45, 66, 32, 46]})
df
Out[4]:
ID CLASS A CLASS B CLASS C DEPTH
0 1 NaN NaN NaN 12
1 1 1.0 NaN NaN 31
2 2 NaN NaN NaN 45
3 3 NaN NaN 1.0 66
4 3 NaN NaN NaN 32
5 4 NaN NaN NaN 46
I would like to create a new column (df["FILTER"]) with the name of the column as value where I have the number 1, but only looking to the columns (CLASS A, CLASS B and CLASS C). So my final dataframe should look like this:
ID CLASS A CLASS B CLASS C DEPTH FILTER
0 1 NaN NaN NaN 12 NaN
1 1 1.0 NaN NaN 31 CLASS A
2 2 NaN NaN NaN 45 NaN
3 3 NaN NaN 1.0 66 CLASS C
4 3 NaN NaN NaN 32 NaN
5 4 NaN NaN NaN 46 NaN
Anyone could help me?
答案1
得分: 4
df['FILTER'] = df.filter(like='CLASS').idxmax(axis=1)
输出:
ID CLASS A CLASS B CLASS C DEPTH FILTER
0 1 NaN NaN NaN 12 NaN
1 1 1.0 NaN NaN 31 CLASS A
2 2 NaN NaN NaN 45 NaN
3 3 NaN NaN 1.0 66 CLASS C
4 3 NaN NaN NaN 32 NaN
5 4 NaN NaN NaN 46 NaN
英文:
Use filter
to select the columns and idxmax
to get the header:
df['FILTER'] = df.filter(like='CLASS').idxmax(axis=1)
Output:
ID CLASS A CLASS B CLASS C DEPTH FILTER
0 1 NaN NaN NaN 12 NaN
1 1 1.0 NaN NaN 31 CLASS A
2 2 NaN NaN NaN 45 NaN
3 3 NaN NaN 1.0 66 CLASS C
4 3 NaN NaN NaN 32 NaN
5 4 NaN NaN NaN 46 NaN
答案2
得分: 2
尝试这段代码之前,最好先了解一下idxmax函数:
class_columns = ["CLASS A", "CLASS B", "CLASS C"]
df['FILTER'] = df[class_columns].idxmax(axis=1)
df['FILTER'] = df['FILTER'].where(df[class_columns].max(axis=1) == 1, np.nan)
英文:
Try this code, before will be great read about idxmax:
class_columns = ["CLASS A", "CLASS B", "CLASS C"]
df['FILTER'] = df[class_columns].idxmax(axis=1)
df['FILTER'] = df['FILTER'].where(df[class_columns].max(axis=1)==1, np.nan)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论