![](/img/trans.png)
[英]How to get column and row from partial string in pandas dataframe efficenitly
[英]Getting the row and column of a string from a Pandas dataframe
我有一個唯一字符串的數據框,我想找到給定字符串的行和列。 我想要這些值,因為我最終會將此數據框導出到 Excel 電子表格。 到目前為止,我發現獲得這些值的最簡單方法是以下方法:
jnames = list(df.iloc[0].to_frame().index)
for i in jnames:
for k in df[i]:
if 'searchstring' in str(k):
print('Column: {}'.format( (jnames.index(i) + 1 ) ) )
print('Row: {}'.format( list( df[i] ).index('searchstring') ) )
break
任何人都可以提出一個更好地利用熊貓固有功能的解決方案嗎?
沒有可重現的代碼/數據,我將組成一個數據框並展示一種簡單的方法:
設置
import pandas as pd, numpy as np
df = pd.DataFrame([['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'b']])
數據框如下所示:
0 1 2
0 a b c
1 d e f
2 g h b
解決方案
result = list(zip(*np.where(df.values == 'b')))
結果
[(0, 1), (2, 2)]
解釋
df.values
訪問數據幀底層的numpy
數組。np.where
創建一個滿足提供條件的坐標數組。zip(*...)
將[x-coords-array, y-coords-array]
轉換為(x, y)
坐標對。這是我不寫雙循環的方法:
value_to_search = "c"
print(df[[x for x in df.columns if value_to_search in df[x].unique()]].index[0])
print(df[[x for x in df.columns if value_to_search in df[x].unique()]].columns[0])
第一個將返回列名,第二個將返回索引。 組合在一起,您將獲得索引列組合。 由於您提到 df 中的所有值都是唯一的,因此兩行都將返回一個值。
如果value_to_search
可能不在數據框中,您可能需要嘗試除外。
通過使用堆棧,來自 jpp 的數據
df[df=='b'].stack()
Out[211]:
0 1 b
2 2 b
dtype: object
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.