Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果标题行为空,则Dataframe追加整个列_Python_Pandas_Dataframe - Fatal编程技术网

Python 如果标题行为空,则Dataframe追加整个列

Python 如果标题行为空,则Dataframe追加整个列,python,pandas,dataframe,Python,Pandas,Dataframe,如果标题列为空,我需要将其与附近的列合并 对于场景1, 我需要合并列3Amount和列4empty 我需要下面的结果 对于场景2, 我需要合并第3列Empty和第4列Amount 我需要下面的结果 任何帮助都将不胜感激 注: 行标题是动态名称。它不是上面提到的静态名称。i、 例如,标题名称可以是任何名称。示例 Amount Empty 0 10 € 1 20 € 2 30 € 3 40 € 使用np.where 使用

如果标题列为空,我需要将其与附近的列合并

对于场景1, 我需要合并列3Amount和列4empty

我需要下面的结果

对于场景2, 我需要合并第3列Empty和第4列Amount

我需要下面的结果

任何帮助都将不胜感激

注: 行标题是动态名称。它不是上面提到的静态名称。i、 例如,标题名称可以是任何名称。

示例

   Amount Empty
0      10     €
1      20     €
2      30     €
3      40     €
使用np.where

使用:

您可以检查数据类型:

s = df.dtypes
print (s)
        object
col0     int64
col      int64
         int64
col2    object
dtype: object
若列名为空字符串且dtype为对象,则表示列由货币填充,逻辑为将这些空字符串替换为缺少的值并向前填充,最后将空列名替换为数字,并通过反向填充替换列名:

m = (s == object) & (s.index == '')
a = s.index.to_series().mask(m).ffill().replace({'':np.nan}).bfill()
“货币”和“下一个数字”列的输出列名称相同:

df.columns = a
print (df)
   col0  col0  col col2 col2
0     €    50    1   50    €
1     €   100    1  100    €
2     €    25    1   25    €
3     €    90    1   90    €
然后使用自定义lambda函数和groupby将其连接在一起:

def f(x):
    if len(x.columns) == 2:
        if isinstance(x.iloc[0, 0], str):
            return x.iloc[:, 0] + ' ' + x.iloc[:, 1].astype(str)
        else:
            return x.iloc[:, 1] + ' ' + x.iloc[:, 0].astype(str)
    else:
        return x.iloc[:, 0]

df = df.groupby(df.columns, axis=1).apply(f)
print (df)

   col   col0   col2
0    1   € 50   € 50
1    1  € 100  € 100
2    1   € 25   € 25
3    1   € 90   € 90

请检查我的最新问题。行标题是动态的。正如上面提到的,它不是静态的。标题是如何生成的。。。?请解释一下动态
m = (s == object) & (s.index == '')
a = s.index.to_series().mask(m).ffill().replace({'':np.nan}).bfill()
df.columns = a
print (df)
   col0  col0  col col2 col2
0     €    50    1   50    €
1     €   100    1  100    €
2     €    25    1   25    €
3     €    90    1   90    €
def f(x):
    if len(x.columns) == 2:
        if isinstance(x.iloc[0, 0], str):
            return x.iloc[:, 0] + ' ' + x.iloc[:, 1].astype(str)
        else:
            return x.iloc[:, 1] + ' ' + x.iloc[:, 0].astype(str)
    else:
        return x.iloc[:, 0]

df = df.groupby(df.columns, axis=1).apply(f)
print (df)

   col   col0   col2
0    1   € 50   € 50
1    1  € 100  € 100
2    1   € 25   € 25
3    1   € 90   € 90