python-3.x - 从数据框中提取特定数据
问题描述
我有一个看起来像这样的数据框:
| 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 数据的组合,如下所示:
| 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
每行的两个 s 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
编辑:对于重复行,仅通过稳定算法添加concat
,最后通过with创建默认索引DataFrame.sort_index
mergesort
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
推荐阅读
- objective-c - 比较两个 UIColors(点击 UIImageView 中的位置与资产目录颜色)
- android - 如何使用 Kotlin Coroutines 处理 Android 传感器事件?
- javascript - Javascript:如何根据点击坐标在画布上查找特定形状
- c++ - 使用 GMock 命名空间的模拟方法
- stata - Stata:根据运行重叠更改时间段
- python - Python Django - 在模板中选择现有的随机对象 ID
- react-native - 调整大小和拖动组件 - React Native
- c# - 从文本文件创建的 ODT 文件需要很长时间才能打开(10 分钟)。我将文件锁定在我认为在 ReadLine 上的某个地方
- java - 将指向结构 (StructureByReference) 的指针传递给 C 代码,如何再次访问该数据?
- windows - PowerShell - Invoke-Sqlcmd 结果到 Export-Csv 设置批处理行限制