python - 将更多数据帧中的值映射到 Pandas 中的多个值
问题描述
我需要一些棘手的映射帮助。
映射一个干净的值并不难,但现在我在一个单元格中有多个值可以映射。没有规定可以有多少个值,但最常见的是 1 到 4 之间。
数据框看起来像这样:
df:
flag id
1 [A],[D]
2 [B]
3 [D],[E]
3 [B],[C]
df1:
id col1 col2 col3
A on 1 true
B on 2 true
C off 4 true
D off 4 false
E on 2 true
df2:
id col1 col2 col3
A on 1 true
B on 2 true
C off 4 true
D off 4 false
E on 2 true
df3:
id col1 col2 col3
A on 4 true
B off 6 true
C off 4 false
D on 3 false
E on 2 true
我需要映射所有三列(col1、col2、col3),所以我将它附加到一列,这就是它需要的方式。
df1['Description'] = df1['col1'] + ', ' + df1['col2'] + ', ' + df1['col3']
df2 和 df3 也是如此。并且取决于我要从哪个数据帧中获取的df中的“标志”列,1来自df1,2来自d2,3来自df3。现在我遇到了很多硬编码的麻烦,我开始分成多行(df ['id']中的列表中的每个值)然后映射,大量的groupby和合并,并且很有可能失败一点。
那么,如果有任何步骤可以从另一个数据帧解析和映射,而不将列值拆分为多列或多行?
我尝试过这样的事情:
for a in df['flag'].values:
if a == '1':
df['Description'] = df['id'].map(df1.set_index('id')['Description'])
elif a == '2':
df['Description'] = df['id'].map(df2.set_index('id')['Description'])
elif a == '3':
df['Description'] = df['id'].map(df3.set_index('id')['Description'])
else:
df['Description'] = 'No RAT data'
但我得到了 NaN 值。期望的输出:
flag id Description
1 [A],[D] (on, 1, true), (off, 4, false)
2 [B] (on, 2, true)
3 [D],[E] (on, 2, true), (on, 2, true)
3 [B],[C] (off, 6, true), (off, 4, false)
欢迎任何形式的帮助。提前致谢。
解决方案
首先你必须定义一个新的数据框,像这样写
d = {'col1':[0,0,0,0,0],'col2':[0,0,0,0,0],'col3':[0,0,0,0,0]}
new_df = pd.DataFrame(d)
new_df['col1']=df1['col1']
new_df['col2']=df1['col2']
new_df['col3']=df1['col3']
核实
推荐阅读
- java - 从Java中的字段中提取多个泛型类型
- javascript - 如何获取由 console.log 打印的对象的第一部分
- wordpress - WooCommerce 产品发布日期和作者显示 - 如何删除/隐藏?
- redux-form - react-redux-promise-listener 的 redux-observable 和 redux-form 示例
- angular - Angular - RxJs ForkJoin 如何在出错后继续多个请求
- php - Laravel + jQuery AJAX 文件上传?
- c# - 无法在 Visual C# 中读取 Excel 单元格值
- loops - Java 8,使用 2 个数组创建 hashmap
- c# - C# MySQL。可以执行查询
- c# - Selenium - 从构造函数(基类)创建新对象