【问题标题】:Create a new data frame based on conditions from columns of a given dataframe根据给定数据框列的条件创建新数据框
【发布时间】:2018-07-01 11:59:09
【问题描述】:

我有以下数据框,

df.head()

UID     Timestamp       Weekday  Business_hour
AAD 2017-07-11 09:31:44 TRUE    TRUE
AAD 2017-07-11 23:24:43 TRUE    FALSE
AAD 2017-07-12 13:24:43 TRUE    TRUE
SAP 2017-07-23 14:24:34 FALSE   FALSE
SAP 2017-07-24 16:58:49 TRUE    TRUE
YAS 2017-07-31 21:10:35 TRUE    FALSE

基于以下条件,

活跃:同一个UID是否有较大的事件。即同一个UID在同一天出现超过2次以上。

Multiple_days:同一个 UID 是否活跃多天(2 天以上)。

Busi_weekday:在工作日工作时间内是否倾向于出现相同的 UID。

目标输出应该是这样的,

UID Active  Multiple_days   Busi_weekday
AAD TRUE    TRUE    TRUE
SAP FALSE   TRUE    FALSE
YAS FALSE   FALSE   FALSE

【问题讨论】:

  • 你已经尝试过了吗?我的建议是创建 2 个新列,“日期”[排除时间,从时间戳映射]和“Busi_weekday”[布尔,从时间戳确定]。然后执行 pandas.groupby.count。尝试一下并包含您的代码,这样您就更有可能获得良好的响应。

标签: python pandas numpy group-by


【解决方案1】:

你可以这样一一计算:

data.Timestamp = pd.to_datetime(data.Timestamp)
data['date' ] = [x.date() for x in data.Timestamp]

target_df = pd.DataFrame()
target_df['UID'] = data.UID.unique()


a = data.groupby(['UID', 'date']).size()
a = a[a>1]
target_df['Active'] = [True if x in pd.DataFrame(a).reset_index().UID.values else False for x in target_df.UID.values]

a = data.groupby('UID')['Timestamp'].nunique()
a = a[a>1]
target_df['Multiple_days'] = [True if x in pd.DataFrame(a).reset_index().UID.values else False for x in target_df.UID.values]

a = data[(data.Weekday==True)&(data.Business_hour==True)].UID.unique()
target_df['Busi_weekday'] = [True if x in a else False for x in target_df.UID.values]

target_df

【讨论】:

  • 谢谢我明白了,主数据框很大,上面的脚本已经运行了一个小时了
  • 不知道,尝试找到需要这么多时间的确切行,您也可以尝试将“pd.DataFrame(a).reset_index().UID.values”放入变量并对其进行迭代。
  • 是的,尝试一下
猜你喜欢
  • 2021-11-04
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 2021-12-09
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多