python - 删除 nan 值后合并几乎相同的行
问题描述
我有一个像这样的数据框,
pri_col col1 col2 Date
r1 3 4 2020-09-10
r1 4 1 2020-09-11
r1 2 7 2020-09-12
r1 6 4 2020-09-13
注意:“pri_col”列中有更多唯一值。这只是一个示例。所以我给出单一的价值。此外,对于 'pri_col' 的单个值,'Date' 的值将始终是唯一的。我需要这样的数据框,
pri_col col1_2020-09-10 col1_2020-09-11 col1_2020-09-12 col1_2020-09-13 col2_2020-09-10 col2_2020-09-11 col2_2020-09-12 col2_2020-09-13
r1 3 4 2 6 4 1 7 4
根据之前的解决方案,我尝试了这个解决方案:
df = (df.reset_index()
.melt(id_vars=['index','pri_col','Date'],
var_name='cols',
value_name='val')
.pivot(index=['index','pri_col'],
columns=['cols','Date'],
values='val'))
df.columns = [f'{a}_{b}' for a, b in df.columns]
df = df.reset_index(level=1).rename_axis(None)
print (df)
但这是生成的数据框:
pri_col col1_2020-09-10 col1_2020-09-11 col1_2020-09-12 col1_2020-09-13 col2_2020-09-10 col2_2020-09-11 col2_2020-09-12 col2_2020-09-13
r1 3 NaN NaN NaN 4 NaN NaN NaN
r1 NaN 4 NaN NaN NaN 1 NaN NaN
r1 NaN NaN 2 NaN NaN NaN 7 NaN
r1 NaN NaN NaN 6 NaN NaN NaN 4
我该如何解决这个问题?
解决方案
IIUC,pandas.DataFrame.set_index
与 一起使用unstack
:
new_df = df.set_index(['pri_col', 'Date']).unstack()
new_df.columns = ["%s_%s" % (i, j) for i, j in new_df.columns]
print(new_df)
输出:
col1_2020-09-10 col1_2020-09-11 col1_2020-09-12 col1_2020-09-13 \
pri_col
r1 3 4 2 6
col2_2020-09-10 col2_2020-09-11 col2_2020-09-12 col2_2020-09-13
pri_col
r1 4 1 7 4
推荐阅读
- java - 带有 3 个 select 语句的存储过程只返回一个表
- linux - UNIX:使用单个 find 命令搜索大于 4 MiB 的文件,然后将输出通过管道传输到排序命令
- google-apps-script - 使用 Google BigQuery / Apps 脚本为插入 Google 表格的数据添加时间戳
- reactjs - BootstrapTable 不接受 data={groupDetails?.group?.data?.contacts} 作为有效数据
- sql - 如何在PL / SQL中声明执行后输出参数(类型num_array)过程结果
- flutter - 如何使用 Stack 和 Positioned 使应用程序响应式 - Flutter
- javascript - 为什么 float left 不适用于最后一个元素?
- javascript - 有没有更好的方法来实现这一目标?
- javascript - 时间延迟后的开始间隔和按钮释放/反应停止
- python - How to print selected text from JSON file using Python