我有两个数据帧
df1 = pd.DataFrame([[1,2],[3,4],[5,6],[7,8]], index = ['a','b','c', 'a'], columns = ['d','e'])
d e
a 1 2
b 3 4
c 5 6
a 7 8
df2 = pd.DataFrame([['a', 10],['b',20],['c',30],['f',40]])
0 1
0 a 10
1 b 20
2 c 30
3 f 40
我希望我的最终数据帧将df1的行数乘以与df2中的值相对应的因子(例如,对于b为20)
所以我的输出应该是
d e
a 10 20
b 60 80
c 150 180
a 70 80
请提供一个解决方案,假设df1的长度为数百行。我只能想到循环遍历df1.index。
答案 0 :(得分:2)
使用set_index
和reindex
将df2
与df1
对齐,然后mul
In [1150]: df1.mul(df2.set_index(0).reindex(df1.index)[1], axis=0)
Out[1150]:
d e
a 10 20
b 60 80
c 150 180
a 70 80
答案 1 :(得分:1)
创建df.apply
并致电In [1128]: mapping = dict(df2.values)
In [1129]: df1.apply(lambda x: x * mapping[x.name], 1)
Out[1129]:
d e
a 10 20
b 60 80
c 150 180
a 70 80
:
commandout=()
while IFS= read -r line # Read a line
do
commandout+=("$line") # Append line to the array
done < <(tmsh list ltm virtual $vip | grep destination)
for output in "$commandout";
do
if [[ $output == *"destination"* ]];then
#split off ip and port
ipport=$(echo $output | awk 'BEGIN{}{print $2}')
echo $ipport | awk 'BEGIN{FS=":"}{print $1}'
echo $ipport
fi
done
declare -p commandout
答案 2 :(得分:0)
IIUC:
In [55]: df1 * pd.DataFrame(np.tile(df2[[1]],2), columns=df1.columns, index=df2[0])
Out[55]:
d e
a 10 20
a 70 80
b 60 80
c 150 180
Helper DF:
In [57]: pd.DataFrame(np.tile(df2[[1]],2), columns=df1.columns, index=df2[0])
Out[57]:
d e
0
a 10 10
b 20 20
c 30 30
答案 3 :(得分:0)
这是直截了当的。您只需确保它们具有公共轴,然后您可以将它们组合在一起:
将查阅列放入索引
df2.set_index(0, inplace=True)
1
0
a 10
b 20
c 30
现在您可以非常轻松地将该列放入df1:
df1['multiplying_factor'] = df2[1]
现在您只想将两列相乘:
df1['final_value'] = df1.e*df1.multiplying_factor
现在df1看起来像:
d e multiplying_factor final_value
a 1 2 10 20
b 3 4 20 80
c 5 6 30 180
a 7 8 10 80