Python 3.x 从数据帧中提取特定数据
我有一个如下所示的数据框:Python 3.x 从数据帧中提取特定数据,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我有一个如下所示的数据框: | Start| End | Distance| |------|-----|---------| | A | B | 10| | A | C | 11| | A | D | 12| | B | C | 13| | B | D | 14| | C | D | 15| 我需要根据如下所示的列表提取距离值: start_end_list =
| Start| End | Distance|
|------|-----|---------|
| A | B | 10|
| A | C | 11|
| A | D | 12|
| B | C | 13|
| B | D | 14|
| C | D | 15|
我需要根据如下所示的列表提取距离值:
start_end_list = [A, B, B, C, C]
| Start| End | Distance|
|------|-----|---------|
| A | B | 10|
| A | B | 10|
| A | C | 11|
| A | C | 11|
| B | C | 13|
| B | C | 13|
因此,提取的距离值将转换为另一个数据帧,该数据帧是开始和结束数据的组合,如下所示:
start_end_list = [A, B, B, C, C]
| Start| End | Distance|
|------|-----|---------|
| A | B | 10|
| A | B | 10|
| A | C | 11|
| A | C | 11|
| B | C | 13|
| B | C | 13|
如何使用Panda Python实现这一点?仅使用列表中选定的列进行过滤,并通过以下方式测试每行的True
s:
另一个想法是通过&
对按位和
的列和链掩码分别进行测试:
df1 = df[df['Start'].isin(start_end_list) & df['End'].isin(start_end_list)]
详情1:
print (df[['Start','End']].isin(start_end_list))
Start End
0 True True
1 True True
2 True False
3 True True
4 True False
5 True False
print (df[['Start','End']].isin(start_end_list).all(axis=1))
0 True
1 True
2 False
3 True
4 False
5 False
dtype: bool
详情2:
print (df['Start'].isin(start_end_list))
0 True
1 True
2 True
3 True
4 True
5 True
Name: Start, dtype: bool
print (df['End'].isin(start_end_list))
0 True
1 True
2 False
3 True
4 False
5 False
Name: End, dtype: bool
print (df['Start'].isin(start_end_list) & df['End'].isin(start_end_list))
0 True
1 True
2 False
3 True
4 False
5 False
dtype: bool
编辑:对于重复行,仅使用稳定的算法添加默认索引mergesort
,并使用drop=True
df2 = pd.concat([df1, df1]).sort_index(kind='mergesort').reset_index(drop=True)
print (df2)
Start End Distance
0 A B 10
1 A B 10
2 A C 11
3 A C 11
4 B C 13
5 B C 13
仅按列表中的选定列使用和筛选,并按以下方式测试每行的True
s:
另一个想法是通过&
对按位和
的列和链掩码分别进行测试:
df1 = df[df['Start'].isin(start_end_list) & df['End'].isin(start_end_list)]
详情1:
print (df[['Start','End']].isin(start_end_list))
Start End
0 True True
1 True True
2 True False
3 True True
4 True False
5 True False
print (df[['Start','End']].isin(start_end_list).all(axis=1))
0 True
1 True
2 False
3 True
4 False
5 False
dtype: bool
详情2:
print (df['Start'].isin(start_end_list))
0 True
1 True
2 True
3 True
4 True
5 True
Name: Start, dtype: bool
print (df['End'].isin(start_end_list))
0 True
1 True
2 False
3 True
4 False
5 False
Name: End, dtype: bool
print (df['Start'].isin(start_end_list) & df['End'].isin(start_end_list))
0 True
1 True
2 False
3 True
4 False
5 False
dtype: bool
编辑:对于重复行,仅使用稳定的算法添加默认索引mergesort
,并使用drop=True
df2 = pd.concat([df1, df1]).sort_index(kind='mergesort').reset_index(drop=True)
print (df2)
Start End Distance
0 A B 10
1 A B 10
2 A C 11
3 A C 11
4 B C 13
5 B C 13
我刚刚编辑了这个问题,如果我在开始\结束\列表中有一个重复的值,并且必须根据它提取距离,该怎么办?(如编辑的问题中所示)我刚刚编辑了问题,如果我在开始\结束\列表中有一个重复的值,并且必须根据该值提取距离,该怎么办?(如编辑的问题所示)