猿问

Pandas 将行合并和转换为列和特征工程

我有两张这样的桌子,


表 A


ID_1   Value_1   Value_2

1      ABC       N_1

2      DEF       N_2

3      GHI       N_3

表 B


B_ID_1 B_Value_1     Value_2

1      abcd            N_1

1      abc             N_2

3      GHI_1           N_3

3      GHI_2           N_3

3      GHI_3           N_3

3      GHI_4           N_3

特定数字的记录数恰好是 ID。在这种情况下,它是 4。但它每次都在变化。我想做一个左合并(从表 A 到表 B),然后将它转换成这样的东西。


ID_1   Value_1   Value_2     B_Value_1_1    B_Value_2_1  B_Value_1_2      B_Value_2_2     B_Value_1_3     B_Value_2_3    B_Value_1_4    B_Value_2_4        

1      ABC       N_1         abcd             N_1           abc          N_2

2      DEF       N_2

3      GHI       N_3         GHI_1            N_3          GHI_2         N_3                  GHI_3            N_3             GHI_4            N_3

并添加两个额外的列。


count_match 基本上是检查 Value_1 到 B_Value_1_1 到 B_value_1_4 的匹配次数


numberofvalue 基本上是检查从 B_Value_1_1 到 B_value_1_4 存在的匹配数。


在这种情况下,额外的列(count_match 和 numberofvalues)看起来像


ID_1  count_match numberofvalues

1      1               2   

2      0               0 

3      0               4 

我怎样才能做到这一点。


杨__羊羊
浏览 122回答 1
1回答

aluckdog

这是实现问题第一部分预期结果的一种方法,第二部分在以预期格式获取数据后应该是直截了当的。1. 预处理预处理表 B,使其每个 ID 都有一行。您可以执行groupbyB_ID_1 并传递一个函数来展平组:def flatten_group(x):    n = len(x)    vals = x.iloc[:,1:].values.flatten().reshape(1, -1)    names = np.char.add(        np.array(['B_Value_1_', 'B_Value_2_']*n),        np.repeat(np.arange(1, n+1).astype(str), 2)    )    return pd.DataFrame(data=vals, columns=names)b_prep = b.groupby('B_ID_1').apply(flatten_group).reset_index(level=0)2.左连接在这里你只需做一个左连接pd.merge(a,b_prep,how='left', left_on='ID_1', right_on='B_ID_1').drop('B_ID_1', axis=1)细节b_prep   B_ID_1 B_Value_1_1 B_Value_2_1 B_Value_1_2 B_Value_2_2 B_Value_1_3  \0       1        abcd         N_1         abc         N_2         NaN   0       3       GHI_1         N_3       GHI_2         N_3       GHI_3     B_Value_2_3 B_Value_1_4 B_Value_2_4  0         NaN         NaN         NaN  0         N_3       GHI_4         N_3pd.merge   ID_1 Value_1 Value_2 B_Value_1_1 B_Value_2_1 B_Value_1_2 B_Value_2_2  \0     1     ABC     N_1        abcd         N_1         abc         N_2   1     2     DEF     N_2         NaN         NaN         NaN         NaN   2     3     GHI     N_3       GHI_1         N_3       GHI_2         N_3     B_Value_1_3 B_Value_2_3 B_Value_1_4 B_Value_2_4  0         NaN         NaN         NaN         NaN  1         NaN         NaN         NaN         NaN  2       GHI_3         N_3       GHI_4         N_3
随时随地看视频慕课网APP

相关分类

Python
我要回答