![](/img/trans.png)
[英]Iterate over all rows in dataframe and check all column values are in list
[英]Iterate over rows in pandas dataframe. If blanks exist before a specific column, move all column values over
我正在嘗試遍歷 pandas 數據框中的所有行並將每行中的所有最左邊的列移動,直到每行中的所有非空列值都接觸。 列移動量取決於第一個空值和截止列之間的空列數。
在這種情況下,我試圖將最左側列中的值之間的差距“縮小”到“d”列中,從而觸及特定的截止列“eee”。 相關的“abc”行應該有助於可視化問題。
不應觸摸或移動“eee”列或“eee”右側的列
def moveOver():
df = {
'aaa': ['a', 'a', 'a', 'a', 'a', 'a'],
'bbb': ['', 'b', 'b', 'b', '', 'b'],
'ccc': ['', '', 'c', 'c', '', 'c'],
'ddd': ['', '', '', 'd', '', ''],
'eee': ['b', 'c', 'd', 'e', 'b', 'd'],
'fff': ['c', 'd', 'e', 'f', 'c', 'e'],
'ggg': ['d', 'e', 'f', 'g', 'd', 'f']
}
在第 1 行和第 5 行中:“a”將移動到 3 列索引上的“ddd”列
在第 2 行: ['a','b'] 將分別移動到 2 列索引的列 ['ccc', 'ddd']
等等
finalOutput = {
'aaa': ['', '', '', 'a', '', ''],
'bbb': ['', '', 'a', 'b', '', 'a'],
'ccc': ['', 'a', 'b', 'c', '', 'b'],
'ddd': ['a', 'b', 'c', 'd', 'a', 'c'],
'eee': ['b', 'c', 'd', 'e', 'b', 'd'],
'fff': ['c', 'd', 'e', 'f', 'c', 'e'],
'ggg': ['d', 'e', 'f', 'g', 'd', 'f']
}
你可以這樣做:
keep_cols = df.columns[0:df.columns.get_loc('eee')]
df.loc[:,keep_cols] = [np.roll(v, Counter(v)['']) for v in df[keep_cols].values]
打印(df):
aaa bbb ccc ddd eee fff ggg
0 a b c d
1 a b c d e
2 a b c d e f
3 a b c d e f g
4 a b c d
5 a b c d e f
解釋:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.