[英]Extract specific data from a 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 = [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 做到这一点?
使用boolean indexing
通过和过滤DataFrame.isin
仅选择在列表和两个测试柱True
每行小号DataFrame.all
:
df1 = df[df[['Start','End']].isin(start_end_list).all(axis=1)]
另一个想法是通过Series.isin
分别测试两列,并通过&
为按位AND
测试链掩码:
df1 = df[df['Start'].isin(start_end_list) & df['End'].isin(start_end_list)]
print (df1)
Start End Distance
0 A B 10
1 A C 11
3 B C 13
细节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
添加带有DataFrame.sort_index
的concat
,最后通过DataFrame.reset_index
使用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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.