我有一个数据框,其中有很多行和数字列,例如:
| A | 乙 | C | D |
|---|---|---|---|
| 12 | 7 | 1 | 0 |
| 7 | 1 | 2 | 0 |
| 1 | 1 | 1 | 1 |
| 2 | 2 | 0 | 0 |
我需要通过删除具有所有值都较大的另一行的那些行来减小数据帧的大小。在前面的示例中,我需要删除最后一行,因为第一行的所有值都较大(如果出现重复行,我需要保留其中一个)。并返回这个:
| A | 乙 | C | D |
|---|---|---|---|
| 12 | 7 | 1 | 0 |
| 7 | 1 | 2 | 0 |
| 1 | 1 | 1 | 1 |
我的更快的解决方案如下:
def complete_reduction(df, columns):
def _single_reduction(row):
df["check"] = True
for col in columns:
df["check"] = df["check"] & (df[col] >= row[col])
drop_index.append(df["check"].sum() == 1)
df = df.drop_duplicates(subset=columns)
drop_index = []
df.apply(lambda x: _single_reduction(x), axis=1)
df = df[numpy.array(drop_index).astype(bool)]
return df
Run Code Online (Sandbox Code Playgroud)
还有更好的想法吗?
更新:
在这里找到了一个新的解决方案 /sf/answers/4797026041/ …
Python 中有多个 DateTime 解析器,可以自动解析日期字符串,而无需提供日期时间格式。我的问题是我不需要转换日期时间,我只需要日期时间格式。
示例:从“2021-01-01”开始,我想要类似“%Y-%m-%d”或“yyyy-MM-dd”的内容。
我唯一的想法是尝试使用不同的格式进行投射并获得成功,但我不想列出每种可能的格式。
我正在使用 pandas,因此我可以使用适用于系列或字符串 DateTime 解析器的方法。
有任何想法吗?