您好,我有一个数据框,例如:
Df1
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:focusable="true"
android:foreground="?selectableItemBackground"
app:cardCornerRadius="3dp"
app:cardElevation="5dp"
app:cardUseCompatPadding="true">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp">
<LinearLayout
android:id="@+id/linear_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_toLeftOf="@+id/linear_layout_2"
android:clickable="true"
android:focusable="true"
android:orientation="vertical">
<TextView
android:id="@+id/eventTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:textColor="@color/colorBlack"
android:textSize="18sp"
android:visibility="gone" />
<TextView
android:id="@+id/eventDes"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:visibility="gone" />
<TextView
android:id="@+id/eventAttendee"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:visibility="gone" />
<TextView
android:id="@+id/eventStart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:visibility="gone" />
<TextView
android:id="@+id/eventEnd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:visibility="gone" />
<TextView
android:id="@+id/eventLocation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:visibility="gone" />
</LinearLayout>
<LinearLayout
android:id="@+id/linear_layout_2"
android:layout_width="wrap_content"
android:layout_alignParentRight="true"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:id="@+id/delete"
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:clickable="true"
android:focusable="true"
android:tint="@color/colorBlack"
app:srcCompat="@drawable/ic_baseline_delete_24" />
<ProgressBar
android:id="@+id/progress_circular"
android:layout_centerVertical="true"
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_alignParentEnd="true"
android:visibility="gone" />
</LinearLayout>
</RelativeLayout>
</androidx.cardview.widget.CardView>
和另一个df,例如:
df2
Groups Names COLs COLe
G1 ABC_DEF.1:2-300():Canis_lupus 2 300
G1 SEQUENCE1 NA NA
G1 SEQUENCE2 NA NA
G1 SEQUENCE3 NA NA
G1 ABC_DEF.1:400-600():Canis_lupus 400 600
G1 IJK_LMN.1:20-200():Bos_taurus 20 200
G2 OP_D:500-1000():Felis_catus 500 1000
G2 Sequence3 NA NA
并且想法是创建一个将在所有数据框之间合并的新df
这是预期的结果
COL1 COL2 COL3 COL4 COL5 COL6 Species
ABC_DEF.1 SEQUENCE1 20 80 A 1 Canis_lupus
ABC_DEF.1 SEQUENCE2 500 548 C 3 Canis_lupus
QKC_DEF.2 SEQUENCE2 500 548 Z O Canis_lupus
ABC_DEF.1 SEQUENCE4 520 800 T 9 Canis_lupus
IJK_LMN.1 SEQUENCE1 10 18 D 4 Bos_taurus
AQK_LM9.1 SEQUENCE1 10 18 P 5 Bos_taurus
IJK_LMN.1 SEQUENCE1 30 50 U 0 Bos_taurus
IJK_LMN.1 SEQUENCE3 30 176 E 5 Bos_taurus
OP_D SEQUENCE3 600 700 F 6 Felis_catus
OP_D SEQUENCE1 539 878 G 7 Felis_catus
OP_S SEQUENCE4 20 78 H 8 Felis_catus
想法是解析Groups Names COL2 COL3 COL4 COL5 COL6
G1 ABC_DEF.1:2-300():Canis_lupus SEQUENCE1 20 80 A 1
G1 ABC_DEF.1:400-600():Canis_lupus SEQUENCE2 500 548 B 2
G1 IJK_LMN.1:20-200():Bos_taurus SEQUENCE1 30 50 U 0
G1 IJK_LMN.1:20-200():Bos_taurus SEQUENCE3 30 176 E 5
G2 OP_D:500-1000():Felis_catus SEQUENCE3 600 700 F 6
中的每个Groups
让我们以Df1
为例:
G1
在ABC_DEF.1:2-300():Canis_lupus
中,
然后,如果我有df2
对应于df
中存在的元素,我将调查该COL2
:
我有Names
和SEQUENCE1
属于同一组:
然后如果SEQUENCE2
和COL3
在COL4
-COLs
(此处为Cole
)之间,
所以2-300
是SEQUENCE1
,然后将行添加到新的df中:
20-80
Groups Names COL2 COL3 COL4 COL5 COL6
G1 ABC_DEF.1:2-300():Canis_lupus SEQUENCE1 20 80 A 1
是SEQUENCE2
,因此它位于500-548
上方
然后我对2-300
中的第二个名字感兴趣:G1
再次有ABC_DEF.1:400-600():Canis_lupus
和SEQUENCE1
,但是这里只有SEQUENCE2
在SEQUENCE2
范围内,因此我只添加了这一个
400-600
现在Groups Names COL2 COL3 COL4 COL5 COL6
G1 ABC_DEF.1:2-300():Canis_lupus SEQUENCE1 20 80 A 1
G1 ABC_DEF.1:400-600():Canis_lupus SEQUENCE2 500 548 B 2
,我到了IJK_LMN.1:20-200():Bos_taurus
df2
对应并且在SEQUENCE1
范围
20-200
等
有人对熊猫和蟒蛇有想法吗?
我想我们应该使用合并和拆分名称来获取每个部分:
例如:
Groups Names COL2 COL3 COL4 COL5 COL6
G1 ABC_DEF.1:2-300():Canis_lupus SEQUENCE1 20 80 A 1
G1 ABC_DEF.1:400-600():Canis_lupus SEQUENCE2 500 548 B 2
G1 IJK_LMN.1:20-200():Bos_taurus SEQUENCE1 30 50 U 0
将必须分为:
ABC_DEF.1:2-300():Canis_lupus
之前的所有内容):
之后)答案 0 :(得分:0)
首先,您应该考虑采取以下步骤:
1-从df1
中删除仅包含SEQUENCE1,SEQUENCE2等的行。据我了解,它们没有用,因为没有范围和具体名称。
2-从列Names
然后,您可以执行以下操作:
3-使用pandas.merge合并两个数据框:
df_merged = pd.merge(df1,df2, how = 'inner', left_on = 'Name', right_on = 'COL1')
4-根据您在COL3
和COL4
之间对COLs
和COLe
所说的条件,过滤出结果数据框。
当您像这样进行内部联接时,由于COL1的COL2值(序列)不止一个,因此您将得到重复的结果。因此,您可以根据所需条件轻松过滤出正确的结果。
您可以在此处查看有关与熊猫进行SQL比较的更多信息:
https://pandas.pydata.org/docs/getting_started/comparison/comparison_with_sql.html
请让我知道我的回答是否有帮助。