Python 有条件地将数据合并到现有的dataframe列中
我有以下数据:Python 有条件地将数据合并到现有的dataframe列中,python,pandas,merge,data-manipulation,Python,Pandas,Merge,Data Manipulation,我有以下数据: one_dict={0:“零”,1:“一”,2:“二”,3:“三”,4:“四”} 两个单词={0:“光”,1:“计算”,2:“线”,3:“模糊”,4:“颜色”} np.随机种子(2) n=15 a_df=pd.DataFrame(dict(a=np.random.randint(0,4,n),b=np.random.randint(0,3,n))) a_df[“c”]=np.nan a_df=a_df.排序值(“b”).重置索引(drop=True) 其中,数据帧看起来如下所示
one_dict={0:“零”,1:“一”,2:“二”,3:“三”,4:“四”}
两个单词={0:“光”,1:“计算”,2:“线”,3:“模糊”,4:“颜色”}
np.随机种子(2)
n=15
a_df=pd.DataFrame(dict(a=np.random.randint(0,4,n),b=np.random.randint(0,3,n)))
a_df[“c”]=np.nan
a_df=a_df.排序值(“b”).重置索引(drop=True)
其中,数据帧看起来如下所示:
In [45]: a_df
Out[45]:
a b c
0 3 0 NaN
1 1 0 NaN
2 0 0 NaN
3 2 0 NaN
4 3 0 NaN
5 1 0 NaN
6 2 1 NaN
7 2 1 NaN
8 3 1 NaN
9 0 2 NaN
10 3 2 NaN
11 3 2 NaN
12 0 2 NaN
13 3 2 NaN
14 1 2 NaN
我想用字典中的值替换c
中的值
和two_dict
,结果如下:
In [45]: a_df
Out[45]:
a b c
0 3 0 three
1 1 0 one
2 0 0 zero
3 2 0 .
4 3 0 .
5 1 0 .
6 2 1 calc
7 2 1 calc
8 3 1 blur
9 0 2 NaN
10 3 2 NaN
11 3 2 NaN
12 0 2 NaN
13 3 2 NaN
14 1 2 NaN
企图
不过,我不确定这是一个什么样的好方法
我想我可以做以下几点:
merge\u df=pd.DataFrame(dict(one=one\u dict,two=two\u dict)).reset\u index()
合并_df['zeros']=0
合并_df['one']=1
给予
[62]中的:合并
出[62]:
索引1 2 0 1
0 0零灯光0 1
1 1一计算0 1
2两行0 1
3 3三模糊0 1
4四色0 1
然后将其合并到a_df
,但我不确定如何合并和更新
同时,或者如果这是一个好方法
编辑
- 键对应于列
a的值
只是简写,应该像其他代码一样用值填充
(a_df.drop('c', axis=1)
.merge(pd.DataFrame([one_dict,two_dict])
.rename_axis(index='b',columns='a')
.stack().reset_index(name='c'),
on=['a','b'],
how='left')
)
输出:
a b c
0 3 0 three
1 1 0 one
2 0 0 zero
3 2 0 two
4 3 0 three
5 1 0 one
6 2 1 line
7 2 1 line
8 3 1 blur
9 0 2 NaN
10 3 2 NaN
11 3 2 NaN
12 0 2 NaN
13 3 2 NaN
14 1 2 NaN
这只是创建具有正确结构和合并的新数据帧的问题:
(a_df.drop('c', axis=1)
.merge(pd.DataFrame([one_dict,two_dict])
.rename_axis(index='b',columns='a')
.stack().reset_index(name='c'),
on=['a','b'],
how='left')
)
输出:
a b c
0 3 0 three
1 1 0 one
2 0 0 zero
3 2 0 two
4 3 0 three
5 1 0 one
6 2 1 line
7 2 1 line
8 3 1 blur
9 0 2 NaN
10 3 2 NaN
11 3 2 NaN
12 0 2 NaN
13 3 2 NaN
14 1 2 NaN
dict中的键对应于什么?这里的更新逻辑是什么?
只是简写,应该是filled@QuangHoang不确定你指的是编辑帖子的哪个部分你的dict中的键对应什么?这里的更新逻辑是什么?
只是简写,他们会的filled@QuangHoang不确定你指的是哪个部分编辑了帖子我没有想到要重命名查找框来帮助合并。这是一个巧妙的技巧,将保存在袋子里,谢谢+1我没有想到重命名查找帧来帮助合并。这是一个巧妙的技巧,将保存在袋子里,谢谢+1.