python - 结合 Pandas 数据框
问题描述
我是熊猫的新手。所以请多多包涵。我有一个像这样的df
DF1
column1 column2(ids)
a [1,2,13,4,9]
b [20,14,10,18,17]
c [6,8,12,16,19]
d [11,3,15,7,5]
每个列表中的每个数字对应于第二个数据帧中的列 ID。
DF2
id. value_to_change.
1 x1
2 x2
3 x3
4 x4
5 x5
6 x6
7 x7
8 x8
9 x9
. .
. .
. .
20 x20
第1步
- 我想迭代每个列表并选择 DF2 中具有匹配 ID 的行,并创建 4 个数据帧,因为我在 DF1 中有 4 行。这该怎么做?
因此,例如对于应用逻辑后的第一行,我会得到这个
id. value_to_change
1 x1
2 x2
13 x13
14 x14
9 x9
第二排会给我
id. value_to_change
20 x20
14 x14
10 x10
18 x18
17 x17
等等...
第2步
一旦我有了这 4 个数据帧,我将它们作为参数传递给返回 4 个数据帧的逻辑。2)我怎样才能将它们组合成一个排序的最后一个?
DF3
id. new_value
1 y1
2 y2
3 y3
4 y4
5 y5
6 y6
7 y7
8 y8
9 y9
. .
. .
. .
20 y20
我该怎么办?
解决方案
像这样使用单个数据框会更容易和更有效
初始化
df1 = pd.DataFrame({'label': ['A', 'B', 'C', 'D'], 'ids': [[1,2,13,4,9],
[20,14,10,18,17], [6,8,12,16,19],[11,3,15,7,5]]})
# Some custom function for dataframe operations
def my_func(x):
x['value_to_change'] = x.value_to_change.str.replace('x', 'y')
return x
数据框操作
df1 = df1.explode('ids')
df1['value_to_change'] = df1.explode('ids')['ids'].map(dict(zip(df2.ids, df2.val)))
df1['new_value'] = df1.groupby('label').apply(my_func)['value_to_change']
输出
label ids value_to_change new_value
0 A 1 x1 y1
0 A 2 x2 y2
0 A 13 x13 y13
0 A 4 x4 y4
0 A 9 x9 y9
1 B 20 x20 y20
1 B 14 x14 y14
1 B 10 x10 y10
1 B 18 x18 y18
1 B 17 x17 y17
2 C 6 x6 y6
2 C 8 x8 y8
2 C 12 x12 y12
2 C 16 x16 y16
2 C 19 x19 y19
3 D 11 x11 y11
3 D 3 x3 y3
3 D 15 x15 y15
3 D 7 x7 y7
3 D 5 x5 y5
推荐阅读
- sympy - SymPy 用 subs 替换带有指定标签的 Pauli 符号
- docker - 需要时重建容器
- python - 如何在python中读取以非英语输入的csv文件
- react-native - 如何在反应原生轨道播放器中完成音频时更改播放图标
- jenkins - 无法阻止 Maven 在 Jenkins 中构建工作
- javascript - 如何设置“类型”:“模块”?SyntaxError: 不能在模块外使用 import 语句
- laravel - 为什么 eloquent 在 FK 名称后面加下划线?
- sql - JSONB 更改参数值
- python - 使用 pandas 在 csv 文件中查找非空单元格并将它们打印到新的单元格中
- angular - 错误类型错误:“_co.pagination 未定义”并且 NGX-Bootstrap 分页正在抛出错误上下文