如何根据行中的索引列折叠和连接?

时间:2018-04-20 14:02:06

标签: python python-3.x pandas csv

我有一个大的pandas数据框,其NaN值如下:

ID        NUM           val      time_duration    company           True         Data_in   restriction_time        top
1168      3023          NaN     0 days 00:00:00        0             NaN           NaN          NaN                NaN
1172      926           NaN     0 days 00:00:00        1             NaN           NaN          NaN                NaN
121       626           NaN     0 days 00:03:11      Google          NaN           NaN          NaN                NaN
121       626           NaN          NaN               3             NaN           NaN          NaN                NaN
121       626            0           NaN               4       31/01/2018 23:59    NaN    01/01/2018 00:00         NaN
121       626           NaN          NaN             Amazon          NaN           NaN          NaN                NaN
121       626           NaN          NaN               8             NaN           NaN          NaN                NaN
555       2703          NaN     0 days 00:01:35        9             NaN           NaN          NaN                NaN
555       2703          NaN          NaN              10             NaN           NaN          NaN                NaN
555       2703          NaN          NaN              11             NaN           NaN          NaN                NaN
555       2703           0           NaN              12       31/01/2018 23:59    NaN     01/01/2018 00:00        NaN
555       2703          NaN          NaN              13             NaN           NaN          NaN                NaN

如何将具有相同ID的pandas数据帧的所有元素折叠并连接到单个单元格中。例如:

ID                                NUM                 val        time_duration       company                 True                Data_in     restriction_time          top
1168                             3023                 NaN       0 days 00:00:00          0                    NaN                  NaN               NaN               NaN
1172                              926                 NaN       0 days 00:00:00          1                    NaN                  NaN               NaN               NaN
121,121,121,121,121       626,626,626,626,626          0        0 days 00:03:11     Google,3,4,Amazon,8  31/01/2018 23:59          NaN         01/01/2018 00:00        NaN
555,555,555,555,555     2703,2703,2703,2703,2703       0        0 days 00:01:35     Google,3,4,Amazon,8  31/01/2018 23:59          NaN         01/01/2018 00:00        NaN

如您所见,具有相同ID的所有元素都会折叠并连接到单个单元格中,添加逗号以将所有元素与其他单元格分开。这里的问题是我真的不懂如何使用pandas来处理NaN值和字符串。

1 个答案:

答案 0 :(得分:2)

你可以尝试

df.index=df.ID

yourdf=df.stack().astype(str).groupby(level=[0,1]).apply(','.join).unstack().reindex(columns=df.columns)