python-3.x - Python 将多列合二为一
问题描述
我有一个熊猫数据框,如下所示:
data = {'A' :[1,2,3],
'B':[2,17,17],
'C1' :["C1",np.nan,np.nan],
'C2' :[np.nan,"C2",np.nan]}
# Create DataFrame
df = pd.DataFrame(data)
df
A B C1 C2
0 1 2 C1 NaN
1 2 17 NaN C2
2 3 17 NaN NaN
我想根据“C1”和“C2”创建一个变量“C”(可能有“C4”、“C5”。如果任何 C 的值“C”= C 中的值(C1、C2、C3 ....). 在这种情况下,我的输出应如下所示:
A B C1 C2 C
0 1 2 C1 NaN C1
1 2 17 NaN C2 C2
2 3 17 NaN NaN NaN
解决方案
尝试这个
df1 = df.filter(regex='^C\d+')
df['C'] = df1[df1.isin(df1.columns)].bfill(1).iloc[:,0]
Out[117]:
A B C1 C2 C
0 1 2 C1 NaN C1
1 2 17 NaN C2 C2
2 3 17 NaN NaN NaN
如果要严格比较与自己的列名匹配的值,请使用eq
而不是isin
如下
df['C'] = df1[df1.eq(df1.columns, axis=1)].bfill(1).iloc[:,0]
推荐阅读
- node.js - 路线未正确定向
- javascript - 获取 td 值并使用 JQuery 与输入值进行比较
- javascript - 仅显示客户服务功能 页面底部的移动视图和滚动条
- python - 我可以做些什么来改善线性输出的结果?
- python - 如何使用 Python 中的 SimpleElastix 执行 3d 图像配准?
- javascript - Service Worker 无法订阅 pushManager
- android - 系统是否有可能从应用程序的 ExternalCacheDir 中删除数据?
- plot - R图中的密度
- javascript - 运行 jmeter 记录的脚本,但数据没有在数据库或 UI 上更新
- apache-spark - 合并数据框并选择最新记录