python - Pandas 数据框 : get column item when the corresponding item in another column is greater than a value

标签 python pandas dataframe

我有以下 Pandas 数据框。它是超过 50 万行的大型数据框。

    Event_Number  Well  p_and_s
0              1     7      4.0
1              1     9      0.0
2              1    15      0.0
3              2     7      2.0
4              2     9      7.0
5              2    15      0.0
6              3     5      0.0
7              3     7      8.0
8              3    16      3.0
9              4     7      8.0
10             4    15      0.0
11             5     7      8.0
12             5     9      3.0
13             5    15      6.0
14             6     5      0.0
15             6     7      8.0
16             7     7      8.0
17             7     9      0.0
18             7    15      0.0
19             8     7      8.0
20             8    15      4.0

我想为每组 [column: Event_Number] 找到什么 [column: Well] 在 [p_and_s] 列中具有大于 2 的值。

最终的 dataFrame 应该看起来像这样,新列列出了所有 p_and_s 大于 2 的列

        Event_Number  Well  p_and_s  well_array
0                 1     7      4.0  [7]
1                 1     9      0.0  [7]
2                 1    15      0.0  [7]
3                 2     7      2.0  [9]
4                 2     9      7.0  [9]
5                 2    15      0.0  [9]
6                 3     5      0.0  [7, 16]
7                 3     7      8.0  [7, 16]
8                 3    16      3.0  [7, 16]
9                 4     7      8.0  [7]
10                4    15      0.0  [7]
11                5     7      8.0  [7, 9, 15]
12                5     9      3.0  [7, 9, 15]
13                5    15      6.0  [7, 9, 15]
14                6     5      0.0  [7]
15                6     7      8.0  [7]
16                7     7      8.0  [7]
17                7     9      0.0  [7]
18                7    15      0.0  [7]
19                8     7      8.0  [7, 15]
20                8    15      4.0  [7, 15]

最佳答案

这是一种方法。

s = df[df['p_and_s'] > 2].groupby('Event_Number')['Well'].apply(list)
df['well_array'] = df['Event_Number'].map(s)

解释

  • p_and_s 上应用过滤器后,创建一个将 Event_Number 映射到 Well 的系列。
  • 通过 pd.Series.map 映射到原始数据框。
  • 为了提高性能,应尽可能避免 lambda 函数,因为它们代表昂贵的隐式循环。

结果

    Event_Number  Well  p_and_s  well_array
0              1     7      4.0         [7]
1              1     9      0.0         [7]
2              1    15      0.0         [7]
3              2     7      2.0         [9]
4              2     9      7.0         [9]
5              2    15      0.0         [9]
6              3     5      0.0     [7, 16]
7              3     7      8.0     [7, 16]
8              3    16      3.0     [7, 16]
9              4     7      8.0         [7]
10             4    15      0.0         [7]
11             5     7      8.0  [7, 9, 15]
12             5     9      3.0  [7, 9, 15]
13             5    15      6.0  [7, 9, 15]
14             6     5      0.0         [7]
15             6     7      8.0         [7]
16             7     7      8.0         [7]
17             7     9      0.0         [7]
18             7    15      0.0         [7]
19             8     7      8.0     [7, 15]
20             8    15      4.0     [7, 15]

关于python - Pandas 数据框 : get column item when the corresponding item in another column is greater than a value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49970716/

相关文章:

python - Pandas:Groupby 并使用剩余的列名和值创建字典

python pandas for 循环根据来自哪个数据帧分配列

python - 转换 pandas 数据框中的日期格式

python - 从具有多列条件的数据框中获取行

python - 将函数应用于 Pandas dfs 列表

python - 如果某一列相同,则将一行中的空值与其他行归入空值

python - 导入错误 : No module named bz2 for Python 2. 7.2

python - 从多列的 value_counts 中排除项目

python - 没有名为 "myapp"的模型,即使我在 settings.py 中添加了它

python - 用 pandas drop row 清理嘈杂的数据