【问题标题】:Add row to the top of other dataframe将行添加到其他数据框的顶部
【发布时间】:2020-07-16 23:50:56
【问题描述】:

事情是这样的,我需要将来自其他数据框的一行放在 pandas 中主数据框的顶部,在第一行的上方,其中列名。

示例:

      1value  2value 3value 4value 5value
acity    4       3       6      2     6
bcity    2       6       6      4     1
ccity    5       11      53     6     3
dcity    5       1       4      6     3 
gcity    6       4       2      7     4

还有另一个示例:

1value 2value 3value 4value 5value
 2       5       2      6     3 

现在我需要将第二个样本的值添加到第一个样本的顶部。期望的输出:

        2       5       2      6     3 
      1value  2value 3value 4value 5value
acity    4       3       6      2     6
bcity    2       6       6      4     1
ccity    5       11      53     6     3
dcity    5       1       4      6     3 
gcity    6       4       2      7     4

顺便提一下,我在这个示例数据框中有大约 3000 行和 250 列。

我尝试过使用多索引,但不起作用,它说:TypeError: unhashable type: 'dict'

TypeErrorTraceback

(most recent call last)
    <ipython-input-230-e17cd26b6b7f> in <module>()
    ----> 1 pd.MultiIndex.from_arrays([newdf.columns.to_series().map(topframe.iloc[0].to_dict()), newdf.columns])

    /opt/anaconda2/lib/python2.7/site-packages/pandas/indexes/multi.pyc in from_arrays(cls, arrays, sortorder, names)
        841             return Index(arrays[0], name=name)
        842 
    --> 843         cats = [Categorical.from_array(arr, ordered=True) for arr in arrays]
        844         levels = [c.categories for c in cats]
        845         labels = [c.codes for c in cats]

    /opt/anaconda2/lib/python2.7/site-packages/pandas/core/categorical.pyc in from_array(cls, data, **kwargs)
        385             the unique values of `data`.
        386         """
    --> 387         return Categorical(data, **kwargs)
        388 
        389     @classmethod

    /opt/anaconda2/lib/python2.7/site-packages/pandas/core/categorical.pyc in __init__(self, values, categories, ordered, name, fastpath, levels)
        286                 codes, categories = factorize(values, sort=True)
        287             except TypeError:
    --> 288                 codes, categories = factorize(values, sort=False)
        289                 if ordered:
        290                     # raise, as we don't have a sortable data structure and so

    /opt/anaconda2/lib/python2.7/site-packages/pandas/core/algorithms.pyc in factorize(values, sort, order, na_sentinel, size_hint)
        183     table = hash_klass(size_hint or len(vals))
        184     uniques = vec_klass()
    --> 185     labels = table.get_labels(vals, uniques, 0, na_sentinel, True)
        186 
        187     labels = com._ensure_platform_int(labels)

    pandas/hashtable.pyx in pandas.hashtable.PyObjectHashTable.get_labels (pandas/hashtable.c:14033)()

    TypeError: unhashable type 'dict

【问题讨论】:

  • 请发布完整的回溯,以便更容易找到错误的实际位置。
  • 我已经编辑了@NickilMaveli

标签: python pandas dataframe


【解决方案1】:

您可以将map by dict 使用由第二个df2 的第一行创建的ilociloc

print (df2.iloc[0].to_dict())
{'2value': 5, '5value': 3, '1value': 2, '4value': 6, '3value': 2}

print (df1.columns.to_series().map(df2.iloc[0].to_dict()))
1value    2
2value    5
3value    2
4value    6
5value    3
dtype: int64

df1.columns = [df1.columns.to_series().map(df2.iloc[0].to_dict()), df1.columns]
print (df1)
           2      5      2      6      3
      1value 2value 3value 4value 5value
acity      4      3      6      2      6
bcity      2      6      6      4      1
ccity      5     11     53      6      3
dcity      5      1      4      6      3
gcity      6      4      2      7      4

另一种解决方案是renamedict

print (df1.rename(columns=df2.iloc[0].to_dict()))
       2   5   2  6  3
acity  4   3   6  2  6
bcity  2   6   6  4  1
ccity  5  11  53  6  3
dcity  5   1   4  6  3
gcity  6   4   2  7  4

df1.columns = [df1.rename(columns=df2.iloc[0].to_dict()).columns, df1.columns]
print (df1)
           2      5      2      6      3
      1value 2value 3value 4value 5value
acity      4      3      6      2      6
bcity      2      6      6      4      1
ccity      5     11     53      6      3
dcity      5      1      4      6      3
gcity      6      4      2      7      4

【讨论】:

  • 再次,我有同样的问题,不可散列的类型字典。但是当我检查类型(df)时它是数据框。 @jazrael
  • print (df1.columns.to_series().map(df2.iloc[0].to_dict())) 也返回错误?第二种解决方案也不起作用?
  • df1.columns = [df1.columns.to_series().map(df2.iloc[0].to_dict()), df1.columns] 这行给出有问题,其他都可以
  • 嗯,和df1.columns = pd.MultiIndex.from_arrays([df1.columns.to_series().map(df2.iloc[0].to_dict()), df1.columns])一样
  • 不,同样的问题。也许是设置索引的问题?
【解决方案2】:

方法如下:

df.iloc[0]=df.iloc[0]+df1.iloc[0

【讨论】:

  • 请解释你的代码;纯代码的答案通常没什么用。
猜你喜欢
  • 1970-01-01
  • 2010-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
相关资源
最近更新 更多