根据其他df和使用熊猫的条件,在df中添加新行

时间:2019-03-19 18:08:28

标签: python pandas

为了根据2个数据框信息创建一个新的数据框,我遇到了一些问题。 这是dataframe1

species seq_names   value
dog     seq_C       0.67
cat     seq_F       1.4
cat     seq_E       0.4
dolphin seq_F       0.7
dolphin seq_A       1.9
frog    seq_A       0.8
frog    seq_B       0.40

这里是另一个dataframe2

group_number    col1
1               cat
1               dog
2               dolphin
2               frog
2               seq_X
2               seq_Y

您会看到2 groups。想法是根据它们在df1中匹配的种类及其值将seq_names添加到这些组中。

在这里,我应该得到一个new_df,其中添加了seq_names

group_number    sp_seq_names
1               cat
1               dog
1               seq_C
1               seq_F
1               seq_E   
2               dolphin
2               frog
2               seq_A
2               seq_B
2               seq_X
2               seq_Y

为IMC编辑:如您所见,seq_Xseq_Y仍然存在。

group_number 1获得了seq_names C,F and E,因为所有位置都与该组中的至少一个物种匹配。 But the subtlety is here:您还可以看到group1获得了s eq_name F,但group_number 2却没有得到dolphin也与该序列匹配的事实,但是{ {1}在此cat的价值比dolphin更好(1.4对0.7。) 因此seq_name仅获得2 group_number 2

有人对使用熊猫有想法吗?

我尝试了一些合并操作:

seq_names A and B.

然后创建所需的df:

pd.merge(df2, df1, left_on=['col1'],right_on=['species'],how='outer')

   group_number     col1  species seq_names  value
0             1      cat      cat     seq_F   1.40
1             1      cat      cat     seq_E   0.40
2             1      dog      dog     seq_C   0.67
3             2  dolphin  dolphin     seq_F   0.70
4             2  dolphin  dolphin     seq_A   1.80
5             2     frog     frog     seq_B   0.40
6             2     frog     frog     seq_A   0.80

我得到:

df=[]
for species, group  in  zip (df_new['seq_names'],df_new['group_number']):
 df.append({'groups':group,'sp_seq_names':species})
for species, group  in  zip (df_new['species'],df_new['group_number']):
 df.append({'groups':group,'sp_seq_names':species})

但是如您所见,我无法管理组之间共享的seq_name,并无法根据值确定哪个组获得此seq_name。

1 个答案:

答案 0 :(得分:2)

ConstraintLayout layout = (ConstraintLayout) findViewById(R.id.my_layout);
ConstraintSet set = new ConstraintSet();
set.clone(layout);
set.clear(R.id.cardOne, ConstraintSet.RIGHT);
set.applyTo(layout);
相关问题