从DataFrame second_df
import pandas as pd
second_df = pd.DataFrame([[1, 1], [2, 2], [3, 3]], columns=['a', 'c'])
second_df
a c
0 1 1
1 2 2
2 3 3
我建立了一个系列second_s
。
second_s = second_df.iloc[0]
second_s
a 1
c 1
Name: 0, dtype: int64
当我从DataFrame first_df
中减去该系列时
first_df = pd.DataFrame([[0.0, 0.1], [1.0, 1.1], [2.0, 2.1]], columns=['a', 'b'])
first_df
a b
0 0.0 0.1
1 1.0 1.1
2 2.0 2.1
我明白了
first_df.sub(second_s)
a b c
0 -1.0 NaN NaN
1 0.0 NaN NaN
2 1.0 NaN NaN
但我想要
a b c
0 -1.0 0.1 -1.0
1 0.0 1.1 -1.0
2 1.0 2.1 -1.0
在处理之前不知道“标识符”列a
,b
和c
。除了a
,b
和c
以外,还有很多列,在处理之前也不知道,但是仅根据它们在数据帧中的出现知道有关它们存在的信息。如何获得所需的东西?
答案 0 :(得分:1)
想法是使用Index.union
添加缺失值,然后通过Series.reindex
用新的列名将缺失值添加到Series
中,因此可以减去:
second_df = pd.DataFrame([[1, 1], [2, 2], [3, 3]], columns=['a', 'c'])
first_df = pd.DataFrame([[0.0, 0.1], [1.0, 1.1], [2.0, 2.1]], columns=['a', 'b'])
second_s = second_df.iloc[0]
df = first_df.reindex(columns=first_df.columns.union(second_df.columns), fill_value=0)
print (df)
a b c
0 0.0 0.1 0
1 1.0 1.1 0
2 2.0 2.1 0
out = df.sub(second_s.reindex(df.columns, fill_value=0))
print (out)
a b c
0 -1.0 0.1 -1
1 0.0 1.1 -1
2 1.0 2.1 -1
答案 1 :(得分:1)
IIUC我想我有你需要的东西
convert -quality 100 source.tif \( -clone 0 -resize 16% -scale 3840x2160! \) \( unsharp_mask.tif \) -composite result.tif
首先,找到需要添加到second_df = pd.DataFrame([[1, 1], [2, 2], [3, 3]], columns=['a', 'c'])
second_df.iloc[0]
first_df = pd.DataFrame([[0.0, 0.1], [1.0, 1.1], [2.0, 2.1]], columns=['a', 'b'])
的“新”列。然后只需选择first_df
中存在的列并应用您最初建议的操作即可。
second_df
那么您将拥有
new_cols = list(set(second_df.columns) - set(first_df.columns))
first_df = first_df.reindex(columns=[*first_df.columns.tolist(), *new_cols], fill_value=0)
first_df[second_df.columns] = first_df[second_df.columns].sub(second_s)