Python 将多个数据帧中的值映射到多个数据帧中的值
我需要一些技巧性的映射帮助 映射一个干净的值并不困难,但现在我在一个单元格中有多个值要映射。没有规则可以有多少个值,但最常见的是在1到4之间 数据帧如下所示:Python 将多个数据帧中的值映射到多个数据帧中的值,python,list,pandas,dataframe,mapping,Python,List,Pandas,Dataframe,Mapping,我需要一些技巧性的映射帮助 映射一个干净的值并不困难,但现在我在一个单元格中有多个值要映射。没有规则可以有多少个值,但最常见的是在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
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
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'
我需要映射所有三列(col1、col2、col3),所以我将它附加到一列,这就是它需要的方式
df1['Description'] = df1['col1'] + ', ' + df1['col2'] + ', ' + df1['col3']
df2和df3也是如此。
取决于df中的列“flag”,我将从中获取数据帧,1来自df1,2来自d2,3来自df3。
现在我在很多硬编码方面遇到了麻烦,我开始将其拆分为多行(df['id']中列表中的每个值),然后进行映射、大量分组和合并,在某一点上失败的可能性很大
那么,是否有任何步骤只解析和映射另一个数据帧,而不将列值拆分为多个列或行
我试过这样的方法:
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
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'
但我得到了一些价值观。
期望输出:
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)
欢迎任何形式的帮助。提前感谢。首先,您必须定义一个新的数据帧,如write
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']
检查一下我不明白,这和我的问题有什么关系?我已经弄清楚了为什么会有NaN,而且现在它起作用了,但我相信有一个更简单的方法。