小编Nk0*_*k03的帖子

Pandas:水平扩展/分解数据框

这可能是重复的,但我找不到所需的答案。所以,问题是:

假设,我有一个像这样的数据框:

d1 = {'col1':  [[1],[2,3]],
      'col2' : [[3],[21,1]]}

df1 = pd.DataFrame(d1)
Run Code Online (Sandbox Code Playgroud)
第 1 列 列2
0 [1] [3]
1 [2, 3] [21, 1]

现在,我们可以通过 非常轻松地垂直扩展这个数据框df1.apply(pd.Series.explode)。但是,水平方向扩展和更改列名称的最优雅的方式是什么?

像这样的东西:

d2 = {
    'col1_1':[1,2],
    'col1_2': [np.NAN,3],
    'col2_1' : [3,21],
    'col2_2' : [np.NAN,1]
}
df2 = pd.DataFrame(d2)
Run Code Online (Sandbox Code Playgroud)

输出:

列1_1 列1_2 列2_1 列2_2
0 1 3
1 2 3.0 21 1.0

python dataframe python-3.x pandas pandas-groupby

5
推荐指数
1
解决办法
2449
查看次数

压缩 Pandas 数据框中的列

我正在通过 VerisPy 处理来自 Veris 项目的数据,但在将其重新格式化以用于其他应用程序时遇到了一些麻烦。

VerisPy 输出一个数据帧,其中包含来自提交给 Veris 的 JSON 文件的解析事件信息。数据框中的每一行都对应一个事件,详细说明它是如何/何时发生的。问题是它最终有数千个带有布尔标志的列。

所以每个事件行可能有如下列:

事件编号 恶意软件 动作黑客 误用 演员.外部.竞争对手 演员.外部犯罪 演员.内部.员工 演员.内部.客户 目标
1 真的 错误的 错误的 错误的 错误的 真的 错误的 微软
2 错误的 真的 错误的 真的 错误的 错误的 错误的 美国银行

我想折叠/组合这些并将列值用作实际数据。在上面的例子中,我们可能会这样:

事件编号 行动 演员 目标
1 恶意软件 内部 - 员工 微软
2 黑客攻击 外部 - 竞争对手 美国银行

我是 Pandas 的新手,但从文档中尝试了相当多的东西,结果喜忧参半。Melt 看起来很有希望,但我不确定如何将列名放入实际的行级数据中。有人有指点吗?

python dictionary list dataframe pandas

4
推荐指数
1
解决办法
61
查看次数

标记每个 groupby 中的第一个元素

我有一个如下所示的数据框

df = pd.DataFrame({'group':[1,1,2,2,2],'time':[1,2,3,4,5],'C':[6,7,8,9,10]})
Run Code Online (Sandbox Code Playgroud)
    group   time    C
0   1       1       6
1   1       2       7
2   2       3       8
3   2       4       9
4   2       5       10
Run Code Online (Sandbox Code Playgroud)

并且我希望将每个组中的第一个元素(就时间而言)标记为 True,即:

    group   time    C   first_in_group
0   1       1       6   True
1   1       2       7   False
2   2       3       8   True
3   2       4       9   False
4   2       5       10  False
Run Code Online (Sandbox Code Playgroud)

我尝试了 的几种组合groupbyfirst但没有达到我想要的效果。

在 Pandas 中是否有一种优雅的方式来做到这一点?

numpy list dataframe pandas pandas-groupby

2
推荐指数
1
解决办法
44
查看次数

pandas:将具有相同值的连续行分组为一组

假设我有一个购买的 pandas 数据框,没有这样的发票 ID

item_id customer_id
1 A
2 A
1 B
3 C
4 C
1 A
5 A
Run Code Online (Sandbox Code Playgroud)

因此,我的假设是,如果客户连续订单购买了多个商品,则它们属于一组。所以我想创建一个 order_id 列:

item_id customer_id order_id
1 A 1
2 A 1
1 B 2
3 C 3
4 C 3
1 A 4
5 A 4
Run Code Online (Sandbox Code Playgroud)

order_id 应自动创建且增量。我应该如何处理熊猫呢?

非常感谢

python numpy list dataframe pandas

2
推荐指数
1
解决办法
312
查看次数

pandas 将列表值映射到相应的列

我有一个表(df),其中有一个“actions”列,其中包含一个列表,其中包含 4 个选项中的 2 个值: do1、do2、do3、do4

print(df['actions'])

0    [do1, do4]
1    [do2, do1]
2    [do2, do3]
3    [do2, do1]
4    [do4, do2]
Run Code Online (Sandbox Code Playgroud)

我正在寻找正确的映射函数,以便向表中添加 4 列,并使用“操作”列中的相应值填充每列。例如:

print(df)
do1, do2, do3, do4
1    0     0    1
1    1     0    0 
Run Code Online (Sandbox Code Playgroud)

python dictionary numpy list pandas

1
推荐指数
1
解决办法
217
查看次数

过滤每人 2 个最高的唯一值

我被困在我的项目中的数据整理步骤,我想知道是否有人能够帮助我。

我拥有的数据框的一部分是这样的:

GPI
1 12 10
1 12 12
1 11 18
1 10 20
2 10 12
2 8 14
2 9 16

但是,我按 Person 分组并且只保留 2 个最大的唯一月份值的行。因此,对于第 1 个人,这将是第 12 和 11 个月,对于第 2 个人,这将是第 10 和第 9 个月。最终我想平均每个人的 GPI。

桌子应该是这样的

GPI 平均_GPI
1 12 10 8
1 12 7 8
1 11 7 8
2 10 12 14
2 9 16 14

希望其他人可以帮助我解决这个问题。

这是创建第一个表的代码:import pandas as pd

df = pd.DataFrame({'Person':[1, 1, 1, 1, …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas data-wrangling

0
推荐指数
1
解决办法
61
查看次数

获取字典python中每个键的最大值

我有以下字典,我想输出每个键的最大值:

yo = {'is': [1, 3, 4, 8, 10],
             'at': [3, 10, 15, 7, 9],
             'test': [5, 3, 7, 8, 1],
             'this': [2, 3, 5, 6, 11]}
Run Code Online (Sandbox Code Playgroud)

例如,输出应该是这样的

[10, 15, 8, 11]
or 
['is' 10, 'at' 15, 'test' 8, 'this' 11]
Run Code Online (Sandbox Code Playgroud)

python dictionary key list python-3.x

0
推荐指数
1
解决办法
44
查看次数