我的数据是这样的:
Unique_Number information complete_information
1 Hello Hello World
1 Hello
1 Wrong Info
2 R R, Python
2
3 OverFlow Stackoverflow
4 Only info
我要实现的目标:
如果Unique_number相同(例如,全1,全2等),则应采用complete_information列的值,并将其粘贴到信息列中。 >
所需的输出:
Unique_Number information complete_information
1 Hello World Hello World
1 Hello World
1 Hello World
2 R, Python R, Python
2 R, Python
3 Stackoverflow Stackoverflow
4 Only info
我无法为此找到一个合理的逻辑。我尝试遍历所有的Unique_Numbers,并粘贴complete_information值(如果Unique_Numbers相同),但是遇到了混乱的数据集。
答案 0 :(得分:1)
您可以使用:
df.information=np.where(df.complete_information.notna(),df.complete_information,
df.information)
df.information=df.groupby('Unique_Number')['information'].transform('first')
print(df)
Unique_Number information complete_information
0 1 Hello World Hello World
1 1 Hello World None
2 1 Hello World None
3 2 R, Python R, Python
4 2 R, Python None
5 3 Stackoverflow Stackoverflow
6 4 Only info None
(,如果单元格是complete_information
中的空白字符串,则可能要求将它们替换为np.nan
),或将df.complete_information.notna()
中的np.where(..)
替换为{ {1}}
答案 1 :(得分:1)
使用基于 mask 的ob偏移了 的值(pandas.Series.shift):
In [723]: m = (df['Unique_Number'].shift(-1) == df['Unique_Number']) | (df['Unique_Number'] == df['Unique_Number'].shift(1))
In [724]: df.loc[m, 'information'] = df.loc[m, 'complete_information'].fillna(method='ffill')
In [725]: df
Out[725]:
Unique_Number information complete_information
0 1 Hello World Hello World
1 1 Hello World None
2 1 Hello World None
3 2 R, Python R, Python
4 2 R, Python None
5 3 OverFlow Stackoverflow
6 4 Only info None