python - Pandas 列表的列操作

标签 python pandas

我有一个包含两列的 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/

相关文章:

python - 从列表中生成随机元素,其中一个元素的重复次数不超过一次

python - 将 2 列数据框转换为多级分层数据框

python - Django 反向 URL 查找模板错误

python - 如果使用 getattr,如何从同一个文件调用函数?

python - Pandas 石斑鱼显示类型错误

python - 在python中操作时间序列数据: summing series and aggregating over a time period

Python 破折号 : loading pandas dataframes into data table

python - merge_asof 多列

python - 在 python flask 中,如何获取路由函数之外的路径参数?

python - 展平可变长度数组的列表