python - 比较一个数据帧中的元素,并使用 pandas 将输出放入另一个数据帧
问题描述
我有两个这样的数据框:
df1:
col1 col2 time
0 A A_1 05:02:03
1 A A_2 15:36:14
2 A A_1 28:21:47
3 A A_1 47:21:17
4 A A_1 32:28:01
5 A A_2 37:27:14
我想比较“时间”列中的时间是否 <24h、>24 但 <48、>48 但 <72h 和 >72,并将这些结果放入另一个数据帧,如下所示:
df2:
col1 col2 time <24 24<time<48 48<time<72 time>72
0 A A_1 1 3 NaN NaN
1 A A_2 1 1 NaN NaN
所以,基本上我在这个 df2 中想要的是满足比较的文件数,例如“时间”列中有三个文件属于 A 和 A_1,时间是 24<time<48,我们只需将 3 放入“24<time<48”列。
我从@Andreas 尝试了这段代码,但如果“时间”列中没有 48<time<72 和 time>72 的时间,则会失败:
df['day'] = (df['time'].str.split(':').str[0].astype(int)/24).astype(int)
df = df.pivot_table(index=['col1', 'col2'], columns=['day'], values=['time'], aggfunc='count').reset_index()
d = {'time0':'time <24', 'time1':'24<time<48', 'time2':'48<time<72', 'time3':'time>72'}
df.columns = [d.get(''.join(map(str, x)), ''.join(map(str, x))) for x in df.columns]
ps 我把它作为一个新问题,因为另一个被编辑了很多次
解决方案
我们试试看:
- 将时间值转换为 TimeDelta 以获取天数
clip
确保值不超过 3 天- 使用
pivot_table
then 清理列
import numpy as np
import pandas as pd
df = pd.DataFrame({'col1': {0: 'A', 1: 'A', 2: 'A', 3: 'A', 4: 'A', 5: 'A'},
'col2': {0: 'A_1', 1: 'A_2', 2: 'A_1', 3: 'A_1', 4: 'A_1',
5: 'A_2'},
'time': {0: '05:02:03', 1: '15:36:14', 2: '28:21:47',
3: '47:21:17', 4: '32:28:01', 5: '37:27:14'}})
df['days'] = (
pd.to_timedelta(df['time']).dt.days # Get Days from Time Delta
.clip(lower=0, upper=3) # Clip at 3 Days
)
time_cols = ['time < 24', '24 <= time < 48',
'48 <= time < 72', 'time >= 72']
df = (
df.pivot_table(index=['col1', 'col2'],
columns='days',
aggfunc='count',
fill_value=np.nan)
.droplevel(0, 1) # Remove Column Multi Index
.reset_index() # Reset index
.rename_axis(None, axis=1) # Remove Axis Name
.rename(columns={i: v for i, v in enumerate(time_cols)})
)
# Add Missing Columns
df[list(set(time_cols).difference(df.columns))] = np.nan
# Reorder Columns
df = df[['col1', 'col2', *time_cols]]
print(df)
df
:
col1 col2 time < 24 24 <= time < 48 48 <= time < 72 time >= 72
0 A A_1 1 3 NaN NaN
1 A A_2 1 1 NaN NaN
推荐阅读
- reactjs - React.js - 错误边界
- r - 如何将所有 xaxis 动态设置为所有级别的空?
- python - 使用 Python 从特定日期保存 Outlook 附件
- c# - [C#]在一页中打印多个DataGrid
- node.js - 每个域的 Google Oauth2.0 动态 URL
- javascript - 在 JavaScript 中创建数组数组的逻辑
- cmd - 超时但不影响 %ERRORLEVEL%
- http - curl PUT 请求响应信息未显示
- performance-testing - 蝗虫的多任务
- python - 在 Ubuntu 上,无法在 tkinter 上插入图标