如何在 python 数据帧中创建 n-m 映射 table?
How can I create a n-m mapping table in python dataframe?
我有一个 table 有几行和几列。我的 table 的 index/row 是一个类别,如果有一些 ID,则在我的 table 的最后一行。有没有办法在我的 table 的每个不为空的单元格中写入当前列的 ID?
Table(已经在 Pandas 生成的数据框中):
1 2 3 4 5 6 7 8
9 3161409 50342165 949138 NaN 147466 155307 NaN 3575062
12 NaN NaN NaN NaN NaN NaN NaN NaN
ids m90 v15 o1506 u55 m1701 m174 m90 m90
假设我想在每个不是“NaN”的单元格中都有“m90”。有办法实现吗?
这是期望的输出:
1 2 3 4 5 6 7 8
9 m90 v15 o1506 NaN m1701 m174 NaN m90
12 NaN NaN NaN NaN NaN NaN NaN NaN
ids m90 v15 o1506 u55 m1701 m174 m90 m90
提前致谢。
我们可以创建一个小函数,将 pandas.Series
作为输入并应用于数据框的每一列。
我创建了这个类似于你的玩具数据框
import numpy as np
import pandas as pd
df = pd.DataFrame({
'1': [123, np.nan, 'm90'],
'2': [np.nan, np.nan, 'v15'],
'3': [123445, 4, 'o1506'],
'4': [np.nan, 23, 'u55']
}, index=[9, 12, 'ids'])
然后
def replace_non_nulls(s):
# 's' is a series
replacement = s.loc['ids']
s.loc[s.notna()] = replacement
return s
df.apply(replace_non_nulls)
# 1 2 3 4
# 9 m90 NaN o1506 NaN
# 12 NaN NaN o1506 u55
# ids m90 v15 o1506 u55
我有一个 table 有几行和几列。我的 table 的 index/row 是一个类别,如果有一些 ID,则在我的 table 的最后一行。有没有办法在我的 table 的每个不为空的单元格中写入当前列的 ID?
Table(已经在 Pandas 生成的数据框中):
1 2 3 4 5 6 7 8
9 3161409 50342165 949138 NaN 147466 155307 NaN 3575062
12 NaN NaN NaN NaN NaN NaN NaN NaN
ids m90 v15 o1506 u55 m1701 m174 m90 m90
假设我想在每个不是“NaN”的单元格中都有“m90”。有办法实现吗?
这是期望的输出:
1 2 3 4 5 6 7 8
9 m90 v15 o1506 NaN m1701 m174 NaN m90
12 NaN NaN NaN NaN NaN NaN NaN NaN
ids m90 v15 o1506 u55 m1701 m174 m90 m90
提前致谢。
我们可以创建一个小函数,将 pandas.Series
作为输入并应用于数据框的每一列。
我创建了这个类似于你的玩具数据框
import numpy as np
import pandas as pd
df = pd.DataFrame({
'1': [123, np.nan, 'm90'],
'2': [np.nan, np.nan, 'v15'],
'3': [123445, 4, 'o1506'],
'4': [np.nan, 23, 'u55']
}, index=[9, 12, 'ids'])
然后
def replace_non_nulls(s):
# 's' is a series
replacement = s.loc['ids']
s.loc[s.notna()] = replacement
return s
df.apply(replace_non_nulls)
# 1 2 3 4
# 9 m90 NaN o1506 NaN
# 12 NaN NaN o1506 u55
# ids m90 v15 o1506 u55