簡體   English   中英

根據 Pandas 中列滿足的條件刪除一組列

[英]Dropping a group of columns based on a condition fulfilled by a column in Pandas

我有一個 dataframe,列名是元組。 下面是我的 dataframe 的示例數據:

data = {"('7086', 'Open')": {5: 0.0700000002980232, 6: 0.0649999976158142, 7: 0.0750000029802322, 8: 0.0649999976158142, 9: 0.0700000002980232},
 "('7086', 'High')": {5: 0.0700000002980232, 6: 0.0750000029802322, 7: 0.0750000029802322, 8: 0.0750000029802322, 9: 0.0700000002980232},
 "('7086', 'Low')": {5: 0.0700000002980232, 6: 0.0649999976158142, 7: 0.0750000029802322, 8: 0.0649999976158142, 9: 0.0700000002980232},
 "('7086', 'Close')": {5: 0.0700000002980232, 6: 0.0750000029802322, 7: 0.0750000029802322, 8: 0.0750000029802322, 9: 0.0700000002980232},
 "('7086', 'Adj Close')": {5: 0.0700000002980232, 6: 0.0750000029802322, 7: 0.0750000029802322, 8: 0.0750000029802322, 9: 0.0700000002980232},
 "('7086', 'Volume')": {5: 0, 6: 3200, 7: 0, 8: 200800, 9: 260000},
 "('03028', 'Open')": {5: 0.3600000143051147, 6: 0.3600000143051147, 7: 0.3600000143051147, 8: 0.3600000143051147, 9: 0.3600000143051147},
 "('03028', 'High')": {5: 0.3600000143051147, 6: 0.3600000143051147, 7: 0.3600000143051147, 8: 0.3600000143051147, 9: 0.3600000143051147},
 "('03028', 'Low')": {5: 0.3600000143051147, 6: 0.3600000143051147, 7: 0.3600000143051147, 8: 0.3600000143051147, 9: 0.3600000143051147},
 "('03028', 'Close')": {5: 0.3600000143051147, 6: 0.3600000143051147, 7: 0.3600000143051147, 8: 0.3600000143051147, 9: 0.3600000143051147},
 "('03028', 'Adj Close')": {5: 0.3509772419929504, 6: 0.3509772419929504, 7: 0.3509772419929504, 8: 0.3509772419929504, 9: 0.3509772419929504},
 "('03028', 'Volume')": {5: 15500.0, 6: 0.0, 7: 0.0, 8: 0.0, 9: 0.0}}
df = pd.DataFrame(data)

   ('7086', 'Open')  ...  ('03028', 'Volume')
5             0.070  ...              15500.0
6             0.065  ...                  0.0
7             0.075  ...                  0.0
8             0.065  ...                  0.0
9             0.070  ...                  0.0

[5 rows x 12 columns]

現在,我希望執行的是當數字代碼中的其中一列只有 1 個唯一數字時,刪除具有相同數字代碼的一組列:

df.nunique()

('7086', 'Open')          3
('7086', 'High')          2
('7086', 'Low')           3
('7086', 'Close')         2
('7086', 'Adj Close')     2
('7086', 'Volume')        4
('03028', 'Open')         1
('03028', 'High')         1
('03028', 'Low')          1
('03028', 'Close')        1
('03028', 'Adj Close')    1
('03028', 'Volume')       2
dtype: int64

如上,我們可以在數字代碼03028中看到,6 列中的 5 列只有 1 個唯一值。 因此,我希望根據這個事實刪除所有具有相同數字代碼的6列。 有什么想法我可以做到嗎? 我正在考慮將它組合在一起並刪除它。 但我不確定如何處理元組。 提前致謝。

我預期的 output 將是:

   ('7086', 'Open')  ...  ('7086', 'Volume')
5             0.070  ...                   0
6             0.065  ...                3200
7             0.075  ...                   0
8             0.065  ...              200800
9             0.070  ...              260000

[5 rows x 6 columns]

你可以做

out = df.loc[:,~df.columns.str.contains("'03028',")]

如果多個

out = df.loc[:,~df.columns.str.contains("'03028',|'00000',")]

嘗試這樣的事情

import ast

df.columns = pd.MultiIndex.from_tuples(map(ast.literal_eval, df.columns))

filter_ = (df.nunique()==1).groupby(level=0).any()
df.drop(filter_[filter_].index, axis=1, level=0)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM