这可能是重复的,但我找不到所需的答案。所以,问题是:
假设,我有一个像这样的数据框:
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 |
我正在通过 VerisPy 处理来自 Veris 项目的数据,但在将其重新格式化以用于其他应用程序时遇到了一些麻烦。
VerisPy 输出一个数据帧,其中包含来自提交给 Veris 的 JSON 文件的解析事件信息。数据框中的每一行都对应一个事件,详细说明它是如何/何时发生的。问题是它最终有数千个带有布尔标志的列。
所以每个事件行可能有如下列:
| 事件编号 | 恶意软件 | 动作黑客 | 误用 | 演员.外部.竞争对手 | 演员.外部犯罪 | 演员.内部.员工 | 演员.内部.客户 | 目标 |
|---|---|---|---|---|---|---|---|---|
| 1 | 真的 | 错误的 | 错误的 | 错误的 | 错误的 | 真的 | 错误的 | 微软 |
| 2 | 错误的 | 真的 | 错误的 | 真的 | 错误的 | 错误的 | 错误的 | 美国银行 |
我想折叠/组合这些并将列值用作实际数据。在上面的例子中,我们可能会这样:
| 事件编号 | 行动 | 演员 | 目标 |
|---|---|---|---|
| 1 | 恶意软件 | 内部 - 员工 | 微软 |
| 2 | 黑客攻击 | 外部 - 竞争对手 | 美国银行 |
我是 Pandas 的新手,但从文档中尝试了相当多的东西,结果喜忧参半。Melt 看起来很有希望,但我不确定如何将列名放入实际的行级数据中。有人有指点吗?
我有一个如下所示的数据框
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)
我尝试了 的几种组合groupby,first但没有达到我想要的效果。
在 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 应自动创建且增量。我应该如何处理熊猫呢?
非常感谢
我有一个表(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) 我被困在我的项目中的数据整理步骤,我想知道是否有人能够帮助我。
我拥有的数据框的一部分是这样的:
| 人 | 月 | 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) 我有以下字典,我想输出每个键的最大值:
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)