gpt4 book ai didi

python - Pandas 列表的列操作

转载 作者:行者123 更新时间:2023-12-01 02:49:37 24 4
gpt4 key购买 nike

我有一个包含两列的 pandas 数据框,第一列只有一个日期(“action_date”),第二列包含日期列表(“verification_date”)。我正在尝试计算“action_date”中的日期与相应“verification_date”列中列表中的每个日期之间的时间差,然后用verification_date 中的日期数填充 df 新列,其差异为超过或少于 360 天。

这是我的代码:

df = pd.DataFrame()
df['action_date'] = ['2017-01-01', '2017-01-01', '2017-01-03']
df['action_date'] = pd.to_datetime(df['action_date'], format="%Y-%m-%d")
df['verification_date'] = ['2016-01-01', '2015-01-08', '2017-01-01']
df['verification_date'] = pd.to_datetime(df['verification_date'], format="%Y-%m-%d")
df['user_name'] = ['abc', 'wdt', 'sdf']
df.index = df.action_date
df = df.groupby(pd.TimeGrouper(freq='2D'))['verification_date'].apply(list).reset_index()


def make_columns(df):
df = df
for i in range(len(df)):
over_360 = []
under_360 = []
for w in [(df['action_date'][i]-x).days for x in df['verification_date'][i]]:
if w > 360:
over_360.append(w)
else:
under_360.append(w)
df['over_360'] = len(over_360)
df['under_360'] = len(under_360)
return df

make_columns(df)

这有点有效,除非 df 每行具有相同的值,但这是不正确的,因为日期不同。例如,在数据帧的第一行中,action_date 与 Verification_date 列中列表中的两个项目之间存在超过 360 天的差异,因此 over_360 列应填充为 2。但是,它是空的而 under_360 列则填充为 1,这仅对于“action_date”中的第二行是准确的。

我有一种感觉,我只是搞乱了循环,但我真的被卡住了。感谢您的帮助!

最佳答案

您的问题是您总是使用以下行的最后一次计算的值更新整个列:

df['over_360'] = len(over_360)
df['under_360'] = len(under_360)

您想要做的是相应地设置每行计算的值,您可以通过将上面的行替换为以下内容来完成此操作:

df.set_value(i,'over_360',len(over_360))
df.set_value(i,'under_360',len(under_360))

它的作用是,在 i 行和 over_360under_360 列中设置一个值。

您可以了解更多相关信息here

如果您不喜欢使用set_values,您也可以使用这个:

df.ix[i,'over_360'] = len(over_360)
df.ix[i,'under_360'] = len(under_360)

你可以检查dataframe.ix here .

关于python - Pandas 列表的列操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44925314/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com