[英]merging rows and replacing NaN values with pandas
我試圖將行彼此合並以獲得包含所有存在的值的行。 目前 df 看起來像這樣: dataframe
我想要的是這樣的:
| index | scan .. | snel. | kool .. | note .. |
| ----- | ------- | ----- | ------- | ------- |
| 0 | 7,8 | 4,0 | 20.0 | Fiasp, ..|
我可以在下面的代碼示例中得到 output,但它看起來真的很亂。
我嘗試使用 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])
當我必須對整個數據執行此操作時。csv(每當多次發現像“20-01-2023 13:24”這樣的時間戳時)我擔心它會非常緩慢且耗時。
樣本數據作為您的數據
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.