首页 > 解决方案 > 结合 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步

  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

我该怎么办?

标签: pythonpandasdataframe

解决方案


像这样使用单个数据框会更容易和更有效

初始化

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

推荐阅读