Python 3.x Python-New列返回每个唯一ID的最早数据
我有一个包含三列(客户ID、交易、日期)的数据集。客户ID和交易之间存在一对多关系。我想添加一个新列,其中包含每个唯一客户ID的最早购买数据。我尝试了下面的代码Python 3.x Python-New列返回每个唯一ID的最早数据,python-3.x,pandas,data-cleaning,Python 3.x,Pandas,Data Cleaning,我有一个包含三列(客户ID、交易、日期)的数据集。客户ID和交易之间存在一对多关系。我想添加一个新列,其中包含每个唯一客户ID的最早购买数据。我尝试了下面的代码 df['First Purchase Date'] = df.loc[df.groupby('Customer ID').Date.idxmin(),:] 但当我运行这段代码时,我收到一个错误,在处理上述异常期间,发生了另一个异常:然后以值错误结束。它也不会创建名为First Purchase Date的新列 根据另一列中给定的条件,
df['First Purchase Date'] = df.loc[df.groupby('Customer ID').Date.idxmin(),:]
但当我运行这段代码时,我收到一个错误,在处理上述异常期间,发生了另一个异常:然后以值错误结束。它也不会创建名为First Purchase Date的新列
根据另一列中给定的条件,是否有一种简单的方法来查找列中最早的数据
我也尝试过使用min()
这段代码创建了一个新列,与我前面提到的第一行idxmin不同,但它将“NaN”作为所有内容的值 这是您需要的代码
min_dates=df.groupby(['Customer ID'])['Date'].min()
df['First Purchase Date']=df.apply(lambda行:min_dates.loc[row['Customer ID']],axis=1)
下面是一个简单的工作示例:
csv = """Customer ID,Date
1,2019
1,2018
1,2020
2,2000
2,2010
2,2005"""
from io import StringIO
import pandas as pd
df = pd.read_csv(StringIO(csv))
min_dates = df.groupby(['Customer ID'])['Date'].min()
df['First Purchase Date'] = df.apply(lambda row: min_dates.loc[row['Customer ID']], axis=1)
print(df)
这是输出
Customer ID Date First Purchase Date
0 1 2019 2018
1 1 2018 2018
2 1 2020 2018
3 2 2000 2000
4 2 2010 2000
5 2 2005 2000
这是您需要的代码
min_dates=df.groupby(['Customer ID'])['Date'].min()
df['First Purchase Date']=df.apply(lambda行:min_dates.loc[row['Customer ID']],axis=1)
下面是一个简单的工作示例:
csv = """Customer ID,Date
1,2019
1,2018
1,2020
2,2000
2,2010
2,2005"""
from io import StringIO
import pandas as pd
df = pd.read_csv(StringIO(csv))
min_dates = df.groupby(['Customer ID'])['Date'].min()
df['First Purchase Date'] = df.apply(lambda row: min_dates.loc[row['Customer ID']], axis=1)
print(df)
这是输出
Customer ID Date First Purchase Date
0 1 2019 2018
1 1 2018 2018
2 1 2020 2018
3 2 2000 2000
4 2 2010 2000
5 2 2005 2000
阅读stackoverflow指南。您应该发布一个包含代码和数据的最小示例,以显示错误,并发布错误本身。否则您将得到downvotes。此外,异常具有有价值的信息,可以告诉您代码中的错误。你应该仔细阅读你说的例外是什么意思?我确实发布了上面的代码。这还不够吗?你还需要什么?首先,你得到的错误,你应该经常阅读,并公布完整的错误和你的问题。其次,您发布了一些代码,但还不足以运行和复制您的问题。您需要发布一个显示错误的最小示例。顺便说一句,请注意下面的答案对于阅读stackoverflow指南很有用。您应该发布一个包含代码和数据的最小示例,以显示错误,并发布错误本身。否则您将得到downvotes。此外,异常具有有价值的信息,可以告诉您代码中的错误。你应该仔细阅读你说的例外是什么意思?我确实发布了上面的代码。这还不够吗?你还需要什么?首先,你得到的错误,你应该经常阅读,并公布完整的错误和你的问题。其次,您发布了一些代码,但还不足以运行和复制您的问题。您需要发布一个显示错误的最小示例。顺便说一句,注意下面的答案应该适用于youThanks Aviad。虽然我已经把它包含在我的代码中,并且它可以工作,但我并不完全理解它,尤其是第二行。为了更好地理解这一点,你对我能读到什么有什么建议吗?你需要了解熊猫索引是如何工作的。
df
每个事务有一行,min\u日期
每个客户ID有一行。因此,您不能只从一个数据帧分配到另一个数据帧。阅读更多熊猫教程以及索引和应用的文档。你会掌握它的窍门的。虽然我已经把它包含在我的代码中,并且它可以工作,但我并不完全理解它,尤其是第二行。为了更好地理解这一点,你对我能读到什么有什么建议吗?你需要了解熊猫索引是如何工作的。df
每个事务有一行,min\u日期
每个客户ID有一行。因此,您不能只从一个数据帧分配到另一个数据帧。阅读更多熊猫教程以及索引和应用的文档。你会掌握窍门的