【发布时间】:2021-12-20 03:08:31
【问题描述】:
我试图保留每个日期/行的前 3 个值,并将其他所有值设置为零。
我创建了一个示例数据框:
import pandas as pd
df1 = pd.DataFrame({
'Date':['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04'],
'01K W':[0, 1.2, 0.3, 2],
'02K W':[0.5, 2, 1.4, 3],
'03K W':[2, 1.6, 3, 5],
'04K W':[7, 0.5, 2.4, 5],
'05K W':[4, 2, 4.5, 1],
'06K W':[2.7, 0, 0, 0],
'07K W':[4, 3, 3, 2],
'08K W':[3.8, 1, 9, 2],
'09K W':[1, 4, 0.4, 6.3],
'10K W':[0, 0, 9, 5.6]})
df1 = df1.set_index('Date')
我很难调整apply 函数以获得前n 个值而不是最大值。我用nlargest 尝试过,但后来我得到了错误:Can only compare identically-labeled Series objects.
df1.apply(lambda x: x == x.max(), axis=1)
但我想得到的是:
df2 = pd.DataFrame({
'Date':['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04'],
'01K W':[0, 0, 0, 0],
'02K W':[0, 2, 0, 0],
'03K W':[0, 0, 0, 5],
'04K W':[7, 0, 0, 5],
'05K W':[4, 2, 4.5, 0],
'06K W':[0, 0, 0, 0],
'07K W':[4, 3, 0, 0],
'08K W':[0, 0, 9, 0],
'09K W':[0, 4, 0, 6.3],
'10K W':[0, 0, 9, 5.6]})
df2 = df2.set_index('Date')
非常感谢
【问题讨论】: