添加列以显示每个唯一列值的值,在Pandas中该值的所有示例重复

wr98u20j  于 2023-08-01  发布在  其他
关注(0)|答案(2)|浏览(82)

在pandas中,我想添加一个新的列,显示元素类型的值,对该元素的所有示例重复(找不到更好的描述方法)。
例如,在下面,有一个名为“La”的类型。我想创建一个名为“La”的新栏目。在元素“A”的情况下,对于每个记录,值9应该显示在LA列下面。“B”是2。
我的数据:

Element     Type  Value
A           Ex     5
A           La     9
A           Bd     0
B           La     2 
B           Ex     7 
B           Ex     3

字符串
我想要的是:

Element     Type  Value  La
A           Ex     5     9
A           La     9     9
A           Bd     0     9
B           La     2     2
B           Ex     7     2
B           Ex     3     2


编辑:对于我正在查看的值(La),永远不会有重复。每个元素只有一个。

3bygqnnd

3bygqnnd1#

仅对于“La”,并假设没有重复项,过滤器和map

df['La'] = df['Element'].map(df.loc[df['Type'].eq('La')]
                               .set_index('Element')['Value']
                             )

字符串
输出量:

Element Type  Value  La
0       A   Ex      5   9
1       A   La      9   9
2       A   Bd      0   9
3       B   La      2   2
4       B   Ex      7   2
5       B   Ex      3   2


如果你想要所有元素,使用pivot_tablemerge(这里保留最大值以防重复,但你可以用任何函数聚合):

df.merge(df.pivot_table(index='Element', columns='Type', values='Value',
                        aggfunc='max', fill_value=-1).reset_index(),
         on='Element', how='left')


输出量:

Element Type  Value  Bd  Ex  La
0       A   Ex      5   0   5   9
1       A   La      9   0   5   9
2       A   Bd      0   0   5   9
3       B   La      2  -1   7   2
4       B   Ex      7  -1   7   2
5       B   Ex      3  -1   7   2

r8xiu3jd

r8xiu3jd2#

这里有一个选项:

df.assign(La = df['Value'].where(df['Type'].eq('La')).groupby(df['Element']).transform('first'))

字符串
输出量:

Element Type  Value   La
0       A   Ex      5  9.0
1       A   La      9  9.0
2       A   Bd      0  9.0
3       B   La      2  2.0
4       B   Ex      7  2.0
5       B   Ex      3  2.0


如果你想要所有的:

(df.join(
    df['Type'].str.get_dummies()
    .where(lambda x: x.ne(0))
    .mul(df['Value'],axis=0)
    .groupby(df['Element']).transform('first')))


输出量:

Element Type  Value   Bd   Ex   La
0       A   Ex      5  0.0  5.0  9.0
1       A   La      9  0.0  5.0  9.0
2       A   Bd      0  0.0  5.0  9.0
3       B   La      2  NaN  7.0  2.0
4       B   Ex      7  NaN  7.0  2.0
5       B   Ex      3  NaN  7.0  2.0

相关问题