![](/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.