使用上一列名称-pandas

时间:2019-06-21 10:14:06

标签: python pandas

我有一个数据框,其中每第二个列名都被跳过

例如

enter image description here

Step_1。 这个想法是用以前的名字填充未命名的列以获得:

enter image description here

Step_2。 总结每个班级的“进”和“出”,以获得最终的结果

enter image description here

中间步骤Step_1很重要,不能跳过以获得最终结果。

我非常感谢您的帮助,对于第一次提出问题时不够清楚表示歉意。 谢谢

3 个答案:

答案 0 :(得分:2)

想法将列转换为序列,因此可以用前向填充替换丢失的值,而不是以def function_2(checking): if checking == 'cancel': raise KeyboardInterrupt def function_1(): the_input = input("Enter the text: ") function_2(the_input) try: function_1() except KeyboardInterrupt: print("cancelled by user") 开头的值:

Unnamed

编辑:

如果索引中缺少值:

df.columns = df.columns.to_series().mask(lambda x: x.str.startswith('Unnamed')).ffill()
print (df)
  Column_1 Column_1 Column_2 Column_2
0        a        d        f        g

df.columns = df.columns.to_series().ffill() 解决方案是必要的,如果第二行也是标头-首先将MultiIndex用于header=[0,1]

MultiIndex

答案 1 :(得分:0)

我尝试过

t = pd.DataFrame(df.columns)
t.loc[t[0].str.startswith('Unnamed: '),0] = np.NaN
t[0].bfill(inplace=True)
df.columns = t[0].values

使用原始数据框的列创建临时数据框。根据您的意愿涂抹或填充。再次将值分配回原始数据帧。

答案 2 :(得分:0)

您可以使用列表理解来重写df.index。

select jsonb_array_elements(tableA.content->'params'->'tableBEntries')

已经说过,最好为列分配唯一的名称,因为它们将用作键/索引,即。

from itertools import chain
df = pd.DataFrame(
    {"Column_1": [1], "Unnamed_column1": [2], "Column_2": [3], "Unnamed_column2": [4]})

cols = [[c, c] for c in df.columns[::2]]
df.columns = [_ for _ in chain(*cols)]