这是一个简单的问题,但我无法使用 pd.drop()
或 pd.difference()
找到解决方案。我需要返回一个新的数据帧,不包括选定的系列对象,其中系列对象在 for 循环期间存储在变量中。例如:val = df1[i]
,因此需要像df1.drop(val)
Df1:
1 2 3 4 5 6 7 8 9 10
C C C C C C T T T T
G N D A G N D A G N
K M I L R K M I L R
C C L C C C T T T T
G N D A E N D A G N
Y F V H Q E P W Y F
G N D A G N F A G G
G Y D A G N D A G N
Val:
2
C
N
M
C
N
F
N
Y
New Df1:
1 3 4 5 6 7 8 9 10
C C C C C T T T T
G D A G N D A G N
K I L R K M I L R
C L C C C T T T T
G D A E N D A G N
Y V H Q E P W Y F
G D A G N F A G G
G D A G N D A G N
最佳答案
在问题中,您谈论的是系列的通用术语。但是,在示例中,您使用 df1
列作为排除的系列。每种情况的解决方案都不同。
如果您使用df1
列作为排除的系列,则可以使用series.name
使用drop
。由于您将单个列分割为一个系列,因此它的名称就是列名称。
val = df1[2]
df_new = df1.drop(val.name, 1)
Out[222]:
1 3 4 5 6 7 8 9 10
0 C C C C C T T T T
1 G D A G N D A G N
2 K I L R K M I L R
3 C L C C C T T T T
4 G D A E N D A G N
5 Y V H Q E P W Y F
6 G D A G N F A G G
7 G D A G N D A G N
<小时/>
如果您使用独立系列来排除 df1
列,则无法使用 series.name
,因为 name
现在是不是列名称
。您需要 eq
和 all
来检查系列值以匹配列值并使用 loc
val = pd.Series(['C', 'N', 'M', 'C', 'N', 'F', 'N', 'Y'])
df_new = df1.loc[:, ~df1.eq(val, axis=0).all()]
####Or
df_new = df1.drop(df1.eq(s, axis=0).all().idxmax(), 1)
Out[239]:
1 3 4 5 6 7 8 9 10
0 C C C C C T T T T
1 G D A G N D A G N
2 K I L R K M I L R
3 C L C C C T T T T
4 G D A E N D A G N
5 Y V H Q E P W Y F
6 G D A G N F A G G
7 G D A G N D A G N
关于python - 从数据帧中删除存储在变量中的系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58830294/