繁体   English   中英

从数据框中提取特定数据

[英]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_indexconcat ,最后通过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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM