dataframe在最后新增一行_Pandas 新增一列并对相同的行赋同一个值

本文介绍如何在Pandas DataFrame中为相同行内容添加标识。通过创建新列,利用`pandas.factorize()`对数据进行因子化处理,实现相同行赋同一值的目标。
摘要由CSDN通过智能技术生成

212dffd0283955e366c3bce6265ae892.png

需求来源为知友的一个提问:

pandas如何新增一列,对相同的行赋同一个值?​www.zhihu.com

希望将整行内容一样的内容做同样的标识,可能用于相同内容的筛选。话不多说,咱们直接进入解题。

首先先造个数据:

import pandas as pd


# 构造数据
df = pd.DataFrame([
    [1,2,4,6],
    [3,5,6,9],
    [1,2,4,6],
    [3,5,6,9],
    [3,5,6,2],
], columns=list('abcd'))

df
'''
   a  b  c  d
0  1  2  4  6
1  3  5  6  9
2  1  2  4  6
3  3  5  6  9
4  3  5  6  2
'''

以上我们构造了四行数据,其中0和2相同,1和3相同,接下来就增加一列,预期为相同行为相同值,答案如下:

# 答案
df.assign(f=pd.factorize(df.apply(lambda x: str(x.values), axis=1))[0])
'''
   a  b  c  d  f
0  1  2  4  6  0
1  3  5  6  9  1
2  1  2  4  6  0
3  3  5  6  9  1
4  3  5  6  2  2
'''

我们拆分解析一下答题过程:

先将原数据加工成一个新的列,行数据为所有列的内容组成的列表:

df.apply(lambda x: str(x.values), axis=1)
'''
0    [1 2 4 6]
1    [3 5 6 9]
2    [1 2 4 6]
3    [3 5 6 9]
4    [3 5 6 2]
dtype: object
'''

使用 pandas.factorize() 将这个 Series 因子化:

Pandas 因子化(枚举化)值​www.gairuo.com
a77b45979bc2571aa2883cc7c5ee3828.png
pd.factorize(df.apply(lambda x: str(x.values), axis=1))
# (array([0, 1, 0, 1, 2]),
# Index(['[1 2 4 6]', '[3 5 6 9]', '[3 5 6 2]'], dtype='object'))

结果是一个元组,第一个元素是因子的值,第二个是不重复的元素,所以我们使用切片取到第一个值。

最后用df.assign()来增加这个新列。

(完)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你想根据主键将一个DataFrame匹配到另一个DataFrame新增上,你可以使用`merge`函数来实现。`merge`函数可以根据指定的主键将两个DataFrame进行合并,并将匹配的添加到目标DataFrame新增上。 以下是一个示例代码,演示了如何使用`merge`函数进行匹配: ```python import pandas as pd # 创建示例数据集 data1 = {'key': ['A', 'B', 'C', 'D'], 'value': [1, 2, 3, 4]} df1 = pd.DataFrame(data1) data2 = {'key': ['B', 'C', 'D', 'E'], 'new_value': [5, 6, 7, 8]} df2 = pd.DataFrame(data2) # 根据主键匹配 merged_df = pd.merge(df1, df2, on='key', how='left') # 输出合并结果 print(merged_df) ``` 在上述示例中,首先创建了两个示例数据集`df1`和`df2`,它们都包含一个主键`key`。然后,使用`merge`函数将这两个DataFrame按照主键进行合并,并使用`how='left'`参数指定左连接方式。这样,新的`new_value`就会被添加到目标DataFrame `df1`上,并根据主键进行匹配。最终的合并结果存储在`merged_df`中,并可以进行输出或进一步处理。 请注意,上述示例中使用的是左连接方式(`how='left'`),意味着保留左侧DataFrame的所有行,并将匹配的添加到新增上。你可以根据实际需求选择不同的连接方式,如内连接(`how='inner'`)、右连接(`how='right'`)等。此外,如果主键名不同,可以使用`left_on`和`right_on`参数来指定不同的名进行匹配。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值