合并行并将NaN值替换为Pandas

w3nuxt5m  于 2023-01-24  发布在  其他
关注(0)|答案(1)|浏览(117)

我尝试将行彼此合并,以得到包含所有当前值的一行。当前df如下所示:dataframe
我想要的是这样的东西:

| index | scan .. | snel. | kool .. | note ..  |
| ----- | ------- | ----- | ------- | -------  |
| 0     | 7,8     | 4,0   | 20.0    | Fiasp, ..|

我可以在下面的代码示例中得到输出,但它看起来真的很混乱。
我试着使用groupby,agg,sum,max,它们所做的就是删除列,看起来像这样:df2.groupby('Tijdstempel apparaat').max().reset_index()
我试着用前几行的值填充该行,然后删除不包含所有值的行。但这似乎是一个漫长的工作过程,而且非常混乱。

df2 = df2.loc[df['Tijdstempel apparaat'] == '20-01-2023 13:24']
df2 = df2.reset_index()
del df2['index']
df2['Snelwerkende insuline (eenheden)'].fillna(method='pad', inplace=True)
df2['Koolhydraten (gram)'].fillna(method='pad', inplace=True)
df2['Notities'].fillna(method='pad', inplace=True)
df2['Scan Glucose mmol/l'].fillna(method='pad', inplace=True)
print(df2)
# df2.loc[df2[0,'Snelwerkende insuline (eenheden)']] = df2.loc[df2[1, 'Snelwerkende insuline (eenheden)']]
df2.drop([0, 1, 2])

输出:
当我不得不对整个data.csv文件执行此操作时(每当多次发现像“20-01-2023 13:24”这样的时间戳时),我担心它会非常缓慢和耗时。

wvt8vs2t

wvt8vs2t1#

将数据作为您的数据进行采样

df = pd.DataFrame(data={
    "times":["date1","date1","date1","date1","date1"],
    "type":[1,2,3,4,5],
    "key1":[1,None,None,None,None],
    "key2":[None,"2",None,None,None],
    "key3":[None,None,3,None,None],
    "key4":[None,None,None,"val",None],
    "key5":[None,None,None,None,5],
})

解决方案

melt = df.melt(id_vars="times",
        value_vars=df.columns[1:],)

melt = melt.dropna()

pivot = melt.pivot_table(values="value", index="times", columns="variable", aggfunc=lambda x: x)

更改类型列位置

index = list(pivot.columns).index("type")
pivot = pd.concat([pivot.iloc[:,index:], pivot.iloc[:,:index]], axis=1)

相关问题