我有一个包含样机数据的dataframe,如下所示:
FUND ID FUND NAME AMOUNT client code Price description Trade Date Trade Datetime
0 10101 Holdings company A 10000.5 1234 124.3 abcd 2020-08-19 2020-08-19 12:30:00
1 20202 Holdings company B -2000.5 192 -24.2 abcd 2020-08-20 2020-08-20 12:30:00
2 30303 Holdings company C 3000.5 123 192 NaN 2020-08-21 2020-08-21 12:30:00
3 10101 Holdings company A 10000 1234567 5.5 NaN 2020-08-22 2020-08-22 12:30:00
4 20202 Holdings company B 10000.5 9999 3.887 abcd 2020-08-23 2020-08-23 12:30:00如上所述,此数据帧具有不同的数据类型,我正在努力创建一个列表,该列表根据列是否包含任何负值来标记每个列的True或False。对于包含非数字数据的列,我希望列表默认将其标记为False。
我希望代码是灵活的,这样如果可能的话,我可以将它应用于具有不同列数的不同数据集
基于上面的样机数据框架的所需列表:
negative_list = [False, False, True, False, True, False, False, False]或类似于以下内容的数据帧:
col isnegative
0 FUND ID False
1 FUND NAME False
2 AMOUNT True
3 client code False
4 Price True
5 description False
6 Trade Date False
7 Trade Datetime False发布于 2020-08-27 23:40:05
使用DataFrame.select_dtypes选择数值列,然后使用DataFrame.lt + DataFrame.any并将.reindex与fill_value=False一起使用
s = df.select_dtypes(np.number).lt(0).any()\
.reindex(df.columns, fill_value=False)\
.rename_axis("col").reset_index(name='isnegative')结果:
print(s)
col isnegative
0 FUND ID False
1 FUND NAME False
2 AMOUNT True
3 client code False
4 Price True
5 description False
6 Trade Date False
7 Trade Datetime False发布于 2020-08-27 23:49:31
简单地理解一下dtypes()就可以做到这一点
import io
df = pd.read_csv(io.StringIO(""" FUND ID FUND NAME AMOUNT client code Price description Trade Date Trade Datetime
0 10101 Holdings company A 10000.5 1234 124.3 abcd 2020-08-19 2020-08-19 12:30:00
1 20202 Holdings company B -2000.5 192 -24.2 abcd 2020-08-20 2020-08-20 12:30:00
2 30303 Holdings company C 3000.5 123 192 NaN 2020-08-21 2020-08-21 12:30:00
3 10101 Holdings company A 10000 1234567 5.5 NaN 2020-08-22 2020-08-22 12:30:00
4 20202 Holdings company B 10000.5 9999 3.887 abcd 2020-08-23 2020-08-23 12:30:00"""), sep="\s\s+", engine="python")
dfc = pd.DataFrame([{k:False if str(t)=="object" else (df.loc[:,[k]]<=0).any().all()
for k,t in df.dtypes.to_dict().items()} ]).T.reset_index().rename(columns={"index":"col", 0:"isnegative"})输出
col isnegative
0 FUND ID False
1 FUND NAME True
2 AMOUNT False
3 client code True
4 Price description False
5 Trade Date False
6 Trade Datetime Falsehttps://stackoverflow.com/questions/63619443
复制相似问题